在阅读此篇之前,应当先阅读基于CentOS7镜像和数据挂载卷实现Docker搭建Hadoop集群
服役与退役
Hadoop集群中管理员经常需要向集群中添加节点,或从集群中移除节点。
例如为了扩大存储容量或其他业务需求,需要上线一个DataNode的新节点,这被称为服役(新节点上线)。
相反的,在某些节点出现反常(如故障率过高或者性能过于低下)或其他业务需求,需要下线节点,而且保证不关闭集群和不损害集群中某一天机器的数据节点数据块丢失,这被称为退役(旧节点下线)。
新节点服役
准备新机器
具体操作略,步骤如下:
- 配置JDK和Hadoop环境变量(可以直接从master机器上远程分发)
- 修改该节点的
/etc/hosts
文件,添加其他节点的IP和域名 - 修改其他节点的
/etc/hosts
文件,添加该新节点的IP和域名 - 使该节点可以与其他节点相互之间免密登录
添加和修改配置文件
新建datanode.include
和nodemanager.include
,分别用来指定现役datanode节点和nodemanager节点所在的主机,位置任意,我新建在$HADOOP_HOME/etc/hadoop/
下。
我新增的节点域名为slave3
,现在的需求是在slave3
主机上新增datanode和nodemanager,所以我在这两个文件里需要将slave3
添加这两个文件中。
但是由于这两个文件是用来指定现役的节点,因此之前的节点也应该添加进去。
slave1
slave2
slave3
编辑$HADOOP_HOME/etc/hadoop/hdfs-site.xml
文件,添加(注意,其中的value
的值应当根据自己的配置来):
<property>
<!-- 指定一个文件的完整路径,没有指定,说明说有节点都可连接 -->
<name>dfs.hosts</name>
<value>/opt/module/hadoop-3.3.1/etc/hadoop/datanode.include</value>
</property>
编辑$HADOOP_HOME/etc/hadoop/yarn-site.xml
文件,添加(注意,其中的value
的值应当根据自己的配置来):
<property>
<!--配置nodemanager -->
<name>yarn.resourcemanager.nodes.include-path</name>
<value>/opt/module/hadoop-3.3.1/etc/hadoop/nodemanager.include</value>
</property>
刷新hdfs和yarn
在NameNode节点上执行hdfs dfsadmin -refreshNode
,在ResourceManagerNode
节点上执行yarn rmadmin -refreshNodes
。
进入slave3
,执行hadoop-daemon.sh start datanode
和yarn-daemon.sh start nodemanager
启动DataNode
和NodeManager
。
回到master
主机,执行start-balancer.sh
平衡节点。
上传文件测试,该节点正常接收分块:
旧节点退役
添加和修改配置文件
新建datanode.exclude
和nodemanager.exclude
,分别用来指定现役datanode节点和nodemanager节点所在的主机,位置任意,我新建在$HADOOP_HOME/etc/hadoop/
下。
我退役的节点域名为slave3
,所以要在这两个文件里需要将slave3
添加这两个文件中。
注意:此时不要把include
中的slave3
删除,否则将无法正常迁移副本。
编辑$HADOOP_HOME/etc/hadoop/hdfs-site.xml
文件,添加(注意,其中的value
的值应当根据自己的配置来):
<property>
<name>dfs.hosts.exclude</name>
<value>/opt/module/hadoop-3.3.1/etc/hadoop/datanode.include</value>
</property>
编辑$HADOOP_HOME/etc/hadoop/yarn-site.xml
文件,添加(注意,其中的value
的值应当根据自己的配置来):
<property>
<name>yarn.resourcemanager.nodes.exclude-path</name>
<value>/opt/module/hadoop-3.3.1/etc/hadoop/nodemanager.include</value>
</property>
刷新hdfs和yarn和平衡资源
在master上执行
hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes
start-balancer.sh
执行之后会自动根据负载均衡的原则迁移副本:
等待前面的标变为黄色(Decommissioned
)时,即退役完成,此时方可进入slave3
执行hadoop-daemon.sh stop datanode
和yarn-daemon.sh stop nodemanager
关闭DataNode
和NodeManager
。
然后将include
中的slave3
删除,再次刷新hdfs和yarn
hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes