一、上线节点
1、将新增节点追加到/etc/hosts中,同步到集群所有节点
2、将新节点生成新的机架信息更新到rack.data中,并同步到集群所有节点
3、将新的节点加入到$HADOOP_CONF_DIR/slaves,$HADOOP_CONF_DIR/hosts/datanode_hosts,$HADOOP_CONF_DIR/hosts/exclude_mapred_hosts,$HADOOP_CONF_DIR/hosts/mapred_hosts中,同步到集群所有节点。
4、刷新NN,RM
刷新NN
1 | hdfs dfsadmin -refreshNodes |
刷新RM
1 | yarn rmadmin -refreshNodes |
5、启动DN,并继续保持balance,直到达到一定(建议40%)存储左右的容量
Tips1: 因为在机器刚加进集群时,如果该节点启动计算,将会耗费大量的网络带宽,影响在上面跑的Task,从而影响任务,而任务在写数据时,如果来自DN节点的请求,会先在本地写一份数据,再写远程节点,因此不会影响原有任务,当新节点数据达到一定量时,可以启动NM,换句话说,相当于提高了任务的本地化率,降低影响任务的风险.
Tips2: 在Balance同时,我们可以适当的增加某些目录的副本数一定时间后,恢复副本数量,这样可以加快Balance的效率,让节点能够较快的达到平衡状态。
1 | hadoop-daemon.sh start datanode |
6、将节点从$HADOOP_CONF_DIR/hosts/exclude_mapred_hosts去掉,刷新yarn rmadmin -refreshNodes,在启动NM
1 | yarn-daemon.sh start nodemanager |
二、下线节点
1、将下线节点加入到$HADOOP_CONF_DIR/hosts/exclude_datanode_hosts,$HADOOP_CONF_DIR/hosts/exclude_mapred_hosts中,同步到所有节点,刷新
刷新NN
1 | hdfs dfsadmin -refreshNodes |
刷新RM
1 | yarn rmadmin -refreshNodes |
2、直到页面Decommissioned: NUM完成,或者 Number of Under-Replicated Blocks变得较小,几乎没变化时,即可完成下线节点
3、节点下线完成后,把节点从slaves,datanode_hosts,exclude_datanode_hosts,exclude_mapred_hosts,mapred_hosts,机架信息中删除对应的机器信息。
其实也就是选择适合的方式把集群的变动变到最小,这里只做参考