Hadoop:搭建完全分布式集群

完全分布式就是把Hadoop核心组件分开部署到不同的服务器节点上运行,需要说明的有两点:1、NameNode和Secondary NameNode分开部署是为了当NameNode出现故障后可以通过Secondary NameNode上的数据进行数据恢复,但是它只能恢复最后一次CheckPoint之前的数据。2、DataNode与NodeManager部署在一起是为了可以就近拿数据,而不是通过网络去别的节点上取数据。

集群规划

规划如下

主机名 / IP部署组件
hadoop-1 / 192.168.56.101NameNode
hadoop-2 / 192.168.56.102Secondary NameNode
hadoop-3 / 192.168.56.103ResourceManager
hadoop-4 / 192.168.56.104DataNode、NodeManager
hadoop-5 / 192.168.56.105DataNode、NodeManager
hadoop-6 / 192.168.56.106DataNode、NodeManager

环境说明:CentOS-7、Hadoop-2.7.3、JDK-1.8

安装部署

配置主机名

分别修改6台服务器的主机名为:hadoop-1 ~ hadoop-6

1
vi /etc/hostname

配置主机名与IP之间的映射

在每台服务器上修改Host文件

1
vi /etc/hosts

内容如下

1
2
3
4
5
6
192.168.56.101  hadoop-1
192.168.56.102 hadoop-2
192.168.56.103 hadoop-3
192.168.56.104 hadoop-4
192.168.56.105 hadoop-5
192.168.56.106 hadoop-6

配置Hadoop

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

解压软件包

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

配置环境变量

1
2
3
4
5
6
7
8
9
vi /etc/profile

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

# 让其生效
source /etc/profile

修改Hadoop配置文件,配置文件在$HADOOP_HOME/etc/hadoop下

hadoop-env.sh

1
export JAVA_HOME=/opt/jdk

注: 因为Hadoop是通过SSH来启动组件,由于不在同一个Shell环境中所以通过$HADOOP_HOME的方式取不到对应的值

core-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
<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>

hdfs-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<!-- 配置文件副本数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 配置Secondary NameNode位置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop-2:50090</value>
</property>
</configuration>

mapred-site.xml

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

yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<!-- 指定NodeManager获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-3</value>
</property>
</configuration>

slaves

1
2
3
hadoop-4
hadoop-5
hadoop-6

注: 该文件的作用为指定DataNode和NodeManager节点所在位置,当我们执行start-dfs.sh或start-yarn.sh时会自动帮我们启动指定主机上的DatNode和NodeManager,如果不配置的话需要我们在相应服务器上手动启动

至此hadoop-1上的Hadoop已经配置完毕,将文件拷贝至其他服务器

1
2
3
# hadoop-3 ~ hadoop-6 以此类推
scp -r /opt/jdk hadoop-2:/opt
scp -r /opt/hadoop hadoop-2:/opt

配置hadoop-2 ~ hadoop-3的环境变量,操作与hadoop-1类似

配置免密登录

在hadoop-1上启动NameNode时会顺带启动2上的Secondary NameNode和4、5、6上的DataNode,由于启动脚本是使用SSH远程启动所以也要配置到本机的免密登录

1
2
3
4
5
6
7
8
# hadoop-1 到 1、2、4、5、6
# 在hadoop-1上执行
ssh-keygen -t rsa
ssh-copy-id hadoop-1
ssh-copy-id hadoop-2
ssh-copy-id hadoop-4
ssh-copy-id hadoop-5
ssh-copy-id hadoop-6

在hadoop-3上启动ResourceManager时会顺带启动4、5、6上的NodeManager

1
2
3
4
5
6
# hadoop-3 到 4、5、6
# 在hadoop-3上执行
ssh-keygen -t rsa
ssh-copy-id hadoop-4
ssh-copy-id hadoop-5
ssh-copy-id hadoop-6

启动集群

由于Hadoop通信端口过多管理不方便建议关闭防火墙,在每台服务器上执行如下操作

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

初始化

格式化HDFS,在hadoop-1上执行

1
2
3
4
5
# 旧命令
hadoop namenode -format

# 推荐命令
hdfs namenode -format

启动服务

在hadoop-1上启动NameNode,在启动时会通过SSH远程启动4、5、6上的DataNode和2上的Secondary NameNode

1
2
# 在hadoop-1上执行
start-dfs.sh

在hadoop-3上启动ResourceManager,在启动时会通过SSH远程启动4、5、6上的NodeManager

1
2
# 在hadoop-3上执行
start-yarn.sh

增加DataNode节点

配置主机名和IP映射并关闭防火墙(参考上文),这里暂且叫hadoop-7

首先将上文配置好的软件拷贝至新的服务器

1
2
scp -r /opt/jdk hadoop-7:/opt
scp -r /opt/hadoop hadoop-7:/opt

配置环境变量,操作与hadoop-1类似

启动hadoop-7上的DataNode、NodeManager

1
2
3
# 在hadoop-7上执行
hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager

至此一个新的节点就完成了部署,如果想让以后启动hadoop-1上的NameNode和hadoop-3上的ResourceManager时帮我们分别启动新增节点上的的DataNode和NodeManager,需要修改hadoop-1和hadoop-3上的slaves文件和hosts文件即可,为求方便还可以配置hadoop-1到hadoop-7和hadoop-3到hadoop-7上的免密登录。

如果需要卸载节点可以执行以下命令停止服务

1
2
hadoop-daemon.sh stop datanode
yarn-daemon.sh stop nodemanager

当DataNode节点宕机或网络故障与NameNode之间无法通信,Hadoop并不会立即把该节点判定为死亡状态要经过一个超时时间,超时时间的计算公式为:2 X dfs.namenode.heartbeat.recheck-interval + 10 X dfs.heartbeat.interval,这个两个配置项可以在 hdfs-site.xml 中进行配置,dfs.namenode.heartbeat.recheck-interval默认值为300000毫秒,dfs.heartbeat.interval默认值为3秒,所以默认超时时间为630秒。

  • 本文作者: Harmel
  • 本文链接: http://www.harmel.cn/2018/09/hadoop-distributed.html
  • 版权声明: 文章如无特别说明,则表明该文章为原创文章,如需要转载,请注明出处。
  • 本站说明: 本站使用阿里云服务器,如果您喜欢我的网站,欢迎收藏,能捐赠支持一下就再好不过了。