一:伪分布式

伪分布式顾名思义就是把软件装在一台服务器上,但操作方式与完全分布式集群没有任何区别,一般用于做测试时使用

安装与配置:我使用的环境是CentOS-7、Hadoop-2.7.3、JDK-1.8

1、解压软件包

tar -zxf hadoop.tar.gz -C /opt
tar -zxf jdk.tar.gz -C /opt

2、配置环境变量

vi /etc/profile

# 在末尾追加后保存
export JAVA_HOME=/opt/jdk
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$JAVA_HOME/bin

# 让其生效
source /etc/profile

3、修改主机名和IP映射

# 修改主机名,如我当前机器的主机名为hadoop
vi /etc/hostname

# 添加主机名和IP之间的映射
vi /etc/hosts

127.0.0.1         localhost
192.168.56.101    hadoop

4、配置免密登录:由于Hadoop组件之间使用的是SSH通信为了操作方便可以配置免密码登录,也可以不配置后果就是每次启动时都需要输多次密码

# 生成公钥和私钥
ssh-keygen

# 将公钥拷贝给需要免密登录的服务器
ssh-copy-id hadoop

注:免密登录的前提是两台机器都装有SSH

5、配置Hadoop:配置文件在$HADOP_HOME/etc/hadoop

5.1、修改hadoop-env.sh

# 主要是修改这一行,修改为你JDK的安装目录即可
export JAVA_HOME=/opt/jdk

5.2、修改core-site.xml

<configuration>
    <!-- 配置NameNode所在节点 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop:9000</value>
    </property>
    <!-- 配置数据存放位置 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop-2.7.3/data</value>
    </property>
</configuration>

5.3、修改hdfs-site.xml

<configuration>
    <!-- 配置文件副本数,由于我们是伪分布式只有一台服务器所以配置成1 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

5.4、修改mapred-site.xml

<configuration>
    <!-- 指定Hadoop以后MR运行在YARN上,默认值为local -->
    <property>
        <name>mapreduce.framework.name</name>    
        <value>yarn</value>
    </property>
</configuration>

5.5、修改yarn-site.xml

<configuration>
    <!-- 指定NodeManager获取数据的方式 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定YARN的ResourceManager的地址,由于只有一台服务器所以填本机即可 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop</value>
    </property>
</configuration>

5.6、修改slaves(可选):该文件的作用为指定DataNode和NodeManager节点所在位置,其默认值为localhost所以可以不需要修改,由于上面做了IP映射也可以修改为hadoop

至此所有配置已经修改完毕,接下来对其进行初始化可启动服务

初始化

1、格式化HDFS:格式完后会发现在core-site.xml配置存放数据的目录下会出现一些文件

hdfs namenode -format

# 在旧版本中使用如下命令,该命令在新版本中已标注为过时但还可以使用
hadoop namenode -format

2、启动与关闭Hadoop服务组件

#----------- 开启服务 ------------
start-all.sh  # 启动所有组件,已不推荐使用

# 官方推荐使用如下两个命令
start-dfs.sh  # 启动NameNode、Secondary NameNode、DataNode
start-yarn.sh # 启动ResourceManager、NodeManager

#----------- 关闭服务 ------------
stop-all.sh # 关闭所有,不推荐使用

stop-dfs.sh  # 关闭NameNode、Secondary NameNode、DataNode
stop-yarn.sh # 关闭ResourceManager、NodeManager

注:启动完后可以使用JDK自带的工具检测是否启动成功,输入命令jps如果出现上文出现的5个进程则表示启动成功

3、测试Web管理界面:下面的hadoop是主机名如果没有配置IP映射换成IP地址即可

HDFS:http://hadoop:50070

YARN:http://hadoop:8088

注:如果访问失败先检测那几个服务进程是还在,排除后再关闭防火墙试试实在不行再翻看日志信息

# CentOS-6
service stop iptables  # 停止防火墙服务
chkconfig iptables off # 禁止开机启动

# CentOS-7
systemctl stop firewalld    # 停止防火墙服务
systemctl disable firewalld # 禁止开机启动

 

二:完全分布式

完全分布式就是把上文提到的5个服务进程部署到不同的节点上运行,这里为了简单演示只使用了3台服务器,规划如下

主机名 / IP

部署服务

hadoop-1  192.168.56.101

NameNode、Secondary NameNode、ResourceManager

hadoop-2  192.168.56.102

DataNode、NodeManager

hadoop-3  192.168.56.103

DataNode、NodeManager

安装与配置:我使用的环境是CentOS-7、Hadoop-2.7.3、JDK-1.8

首先在hadoop-1服务器上执行以下步骤

1、解压软件包

tar -zxf hadoop.tar.gz -C /opt
tar -zxf jdk.tar.gz -C /opt

2、配置环境变量

vi /etc/profile

# 在末尾追加后保存
export JAVA_HOME=/opt/jdk
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$JAVA_HOME/bin

# 让其生效
source /etc/profile

3、修改主机名和IP映射

# 修改主机名,如我当前机器的主机名为hadoop
vi /etc/hostname

# 添加主机名和IP之间的映射
vi /etc/hosts

# 每台服务器hosts文件均修改为一下内容
127.0.0.1         localhost
192.168.56.101    hadoop-1
192.168.56.102    hadoop-2
192.168.56.103    hadoop-3

4、配置免密登录:由于在hadoop-1上启动NameNode和ResourceManager的时候会SSH远程登录到hadoop-2和hadoop-3上启动DataNode和NodeManager所以只需在hadoop-1上执行如下命令即可

# 生成公钥和私钥
ssh-keygen

# 将公钥拷贝给需要免密登录的服务器
ssh-copy-id hadoop-2
ssh-copy-id hadoop-3

注:免密登录的前提是两台机器都装有SSH

5、配置Hadoop:配置文件在$HADOP_HOME/etc/hadoop

5.1、修改hadoop-env.sh

# 主要是修改这一行,修改为你JDK的安装目录即可
export JAVA_HOME=/opt/jdk

5.2、修改core-site.xml

<configuration>
    <!-- 配置NameNode所在节点 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-1:9000</value>
    </property>
    <!-- 配置数据存放位置 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop-2.7.3/data</value>
    </property>
</configuration>

5.3、修改hdfs-site.xml

<configuration>
    <!-- 配置文件副本数,由于我们是规划只有两个DataNode节点所以最多只能存2个副本 -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>

5.4、修改mapred-site.xml

<configuration>
    <!-- 指定Hadoop以后MR运行在YARN上,默认值为local -->
    <property>
        <name>mapreduce.framework.name</name>    
        <value>yarn</value>
    </property>
</configuration>

5.5、修改yarn-site.xml

<configuration>
    <!-- 指定NodeManager获取数据的方式 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定YARN的ResourceManager的地址,由于只有一台服务器所以填本机即可 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop-1</value>
    </property>
</configuration>

5.6、修改slaves(可选):该文件的作用为指定DataNode和NodeManager节点所在位置

hadoop-2
hadoop-3

至此所有配置已经修改完毕,接下来将其复制到其他服务器上

scp -r /opt/hadoop-2.7.3 hadoop-2:/opt
scp -r /opt/hadoop-2.7.3 hadoop-3:/opt

初始化

1、格式化HDFS:格式完后会发现在core-site.xml配置存放数据的目录下会出现一些文件

# 在hadoop-1上执行
hdfs namenode -format

# 在旧版本中使用如下命令,该命令在新版本中已标注为过时但还可以使用
hadoop namenode -format

2、启动与关闭Hadoop服务组件

#----------- 开启服务 ------------
# 在hadoop-1上执行
start-all.sh  # 启动所有组件,已不推荐使用

# 官方推荐使用如下两个命令
# 在hadoop-1上执行
start-dfs.sh
# 执行完后每台服务器jps信息
# hadoop-1:NameNode、Secondary NameNode
# hadoop-2:DataNode
# hadoop-3:DataNode

# 在hadoop-1上执行
start-yarn.sh
# 执行完后每台服务器jps信息
# hadoop-1:NameNode、Secondary NameNode、ResourceManager
# hadoop-2:DataNode、NodeManager
# hadoop-3:DataNode、NodeManager

#----------- 关闭服务 ------------
# 在hadoop-1上执行
stop-all.sh # 关闭所有组件,不推荐使用

# 在hadoop-1上执行
stop-dfs.sh  # 关闭hadoop-1上的NameNode、Secondary NameNode和slaves文件中指定节点的DataNode
stop-yarn.sh # 关闭hadoop-1上的ResourceManager和slaves文件中指定节点的NodeManager

3、测试Web管理界面

HDFS:http://hadoop-1:50070

YARN:http://hadoop-1:8088

注:如果访问失败先检测那几个服务进程是还在,排除后再关闭防火墙试试实在不行再翻看日志信息

至此一个完全分布式集群搭建完毕,接下来谈谈怎么增加节点的问题

增加节点

1、拷贝上面配置好的文件到新节点hadoop-4

scp -r /opt/hadoop-2.7.3 hadoop-4:/opt

2、启动hadoop-4上的DataNode、NodeManager

# 在hadoop-4上执行
hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager

至此一个新的节点就完成了部署,如果想让以后启动hadoop-1的NameNode和ResourceManager时启动新增节点的DataNode和NodeManager,需要修改hadoop-1上的slaves文件和hosts文件即可

最后说明:也可以把Secondary NameNode和ResourceManager继续拆开部署到其他的节点上,在真实的环境中一般也是把NameNode和Secondary NameNode进行分开部署为了以后能进行数据恢复

将Secondary NameNode部署在hadoop-5上:修改hdfs-site.xml

<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop-5:50090</value>
</property>

将ResourceManager部署在hadoop-6上:修改yarn-site.xml

<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop-6</value>
</property>