当删除DataNode节点时,不能通过kill当前节点DataNode进程或者删除Hadoop安装文件的方式来暴力下线。暴力下线可能会导致副本文件丢失,严重的会导致Hadoop集群瘫痪。需要使用正确的方式让节点下线。
节点下线
节点下线的配置修改和命令执行都在Namenode所在节点,配置不需要分发,也不需要重启集群!
1、增加配置文件
{hadoop安装目录}/etc/hadoop目录下新建名称为excludes文件。
[root@master hadoop]# touch excludes
2、修改hdfs和yarn配置
{hadoop安装目录}/etc/hadoop/hdfs-site.xml文件。追加以下配置。
<property><name>dfs.hosts.exclude</name><value>/data/soft/hadoop/conf/excludes</value></property>
{hadoop安装目录}/etc/hadoop/yarn-site.xml文件。追加以下配置。
<property><name>yarn.resourcemanager.nodes.exclude-path</name><value>/opt/module/hadoop-3.2.1/etc/hadoop/exclude</value></property>
~~
3、在excludes文件中写入要下线的节点主机名。一行一个。
4、在终端执行平衡数据的命令hdfs dfsadmin -refreshNodes。
[root@master hadoop]# hdfs dfsadmin -refreshNodesRefresh nodes successful[root@master hadoop]#
执行后,登录9870 Web UI查看下线节点的状态变为了Decommissioning,说明集群正在为节点下线平衡数据。
过一会再查看,待下线节点的状态就变为Decommissioned。说明数据已经平衡,之后的数据不会再写入这个节点。可以安全移除。
5、在终端执行平衡计算资源的命令yarn rmadmin -refreshNodes。执行后,登录8088端口的webUI查看,nodes统计中有一个节点状态从Active Nodes变为Decommissionging Nodes,最终变为Decommissioned Nodes状态。说明计算资源平衡完毕,只有不会再使用这个节点做计算了,已有的计算也分配到其他节点进行。可以安全移除当前节点。
6、登录下线节点关闭DataNode和NodeManager进程
执行hdfs --daemon stop datanode命令关闭DataNode进程。
执行yarn --daemon stop nodemanager命令关闭NodeManager进程。
[root@master sbin]# hdfs --daemon stop datanode[root@master sbin]# yarn --daemon stop nodemanager
7、将{hadoop安装目录}/etc/hadoop/worker文件中下线节点名称注释掉。
master#slave1slave2
再次刷新9870端口的web UI,可以看到节点状态已经变为退役并死亡了。之后可以安全的回收节点了。
节点恢复上线
1、将节点从exclude名单中删除。
2、将节点从worker名单中恢复。
3、在上线节点上执行命令hdfs --daemon start datanode启动节点DataNode进程。
4、在上线节点上执行命令yarn --daemon start nodemanager启动节点NodeManager进程。
5、在主节点上执行命令hdfs dfsadmin -refreshNodes平衡数据。
6、在主节点上执行命令yarn rmadmin -refreshNodes恢复计算资源分配。
7、查看HDFS(默认9870端口)和Yarn(默认8088) web UI,确认节点恢复上线。
