hadoop 中添加和删除 datanode和tasktracker(一)

hadoop添加删除datanodetasktracker


hadoop 添加删除datanodetasktracker 

首先: 

建议datanodetasktracker分开写独立的exclude文件,因为一个节点即可以同时是datanodetasktracker,也可以单独是datanodetasktracker 

1
、删除datanode 

修改namenode上的hdfs-site.xml 

<property>

<name>dfs.hosts</name>

<value>/usr/local/hadoop/conf/datanode-allow-list</value>

</property>

 

<property>

<name>dfs.hosts.exclude</name>

<value>/usr/local/hadoop/conf/datanode-deny-list</value>

</property>



其中dfs.host列出了连入namenode的节点,如果为空,则所有的datanode都可以连入namenode。如果不为空,则文件中存在的datanode可以连入。 
dfs.hosts.exclude
列出了禁止连入namenode的节点。 
如果一个节点同时存在于dfs.hostsdfs.hosts.exclude,则禁止连入。 

具体步骤 

1)将要删除的datanode加入到dfs.hosts.exclude指定的文件中。(最好使用主机名,IP有时可能不生效) 

2)动态刷新配置,不需要重启namenode 

hadoop dfsadmin -refreshNodes



3)通过hadoop dfsadmin -reportwebui,可以看到,该datanode的状态为Decommissioning 

4)等待一段时间,该节点为dead状态。 

5)删除dfs.hosts文件中该节点 即下架目标机器后,再次编辑dfs.hosts.exclude,把刚才下架的机器的ip或机器名移走

6 

hadoop dfsadmin -refreshNodes



注:按照上面的操作后,如果你想要重新启用该节点为datanode,从dfs.hosts.exclude中删除该节点,refreshNodes,然后,到该节点上,重启启动该datanode 

/usr/local/hadoop/bin/hadoop-daemon.sh stop datanode

/usr/local/hadoop/bin/hadoop-daemon.sh start datanode



:正确的删除datanode的方法应该是按照上面的方法,使用exclude文件,而不应该直接去datanode上去sotp datanode,这样会造出数据丢失,而且stop以后,webuihadoop dfsadmin -report都仍然显示该datanode节点。除非重新启动namenode 
之所以重新启用exclude的节点时可以stop datanode,因为此时该datanode不包含在cluster中,所以,stop后不会造成数据丢失。 



2
、添加datanode 
如果存在dfs.hosts文件,且不为空,则添加新的datanode到该文件中,refreshNodes 
到新节点上,启动即可 


/usr/local/hadoop/bin/hadoop-daemon.sh start datanode


如果不存在dfs.hosts文件,或文件为空,直接启动新节点即可。 

3
、删除tasktracker 
原理和步骤与删除datanode一样。 

<property>

<name>mapred.hosts</name>

<value>/usr/local/hadoop/conf/tasktracker-allow-list</value>

</property>

 

<property>

<name>mapred.hosts.exclude</name>

<value>/usr/local/hadoop/conf/tasktracker-deny-list</value>

</property>



动态刷新配置的命令为: 
hadoop mradmin -refreshNodes 
立刻生效,可以在webui中看到,nodes节点数量的变化,以及Excluded Nodes节点的变化。 
具体的步骤参考上面的删除datanode的步骤 

注:按照上面的操作后,如果你想要重新启用该节点为tasktracker,从mapred.hosts.exclude中删除该节点,refreshNodes,然后,到该节点上,重启启动该tasktracker 

/usr/local/hadoop/bin/hadoop-daemon.sh stop tasktracker

/usr/local/hadoop/bin/hadoop-daemon.sh start tasktracker



:正确的删除tasktracker的方法应该是按照上面的方法,使用exclude文件,而不应该直接去tasktracker上去sotp tasktracker,这样会造成job失败,而且stop以后,webui上仍然显示该tasktracker节点。除非重新启动jobtracker 

我遇到的一个问题: 
exclude文件中,我使用了IP,发现tasktracker仍然参与计算。 
webui中发现,Excluded Nodes中存在该IPNodes中仍然存在该tasktrackerhostname 
解决的办法就是,在exclude中使用hostname而不使用IP 
判断是否真正生效:如果exclued文件中正确的填写了要失效的node,则总得nodes数量应该减小。 

4
、添加tasktracker 
 
如果存在mapred.hosts文件,且不为空,则添加新的tasktracker到该文件中,refreshNodes 
到新节点上,启动即可 

/usr/local/hadoop/bin/hadoop-daemon.sh start tasktracker


如果不存在mapred.hosts文件,或文件为空,直接启动新节点即可。 


6
、添加或删除datanode后,平衡磁盘利用率 
运行bin/start-balancer.sh,这个会很耗时间 
备注: 
如果不balance,那么cluster会把新的数据都存放在新的node上,这样会降低mr的工作效率; 

/usr/local/hadoop/bin/start-balancer.sh -threshold 0.1

7下架目标机器后,再次编辑mapred.hosts.exclude,把刚才下架的机器的ip或机器名移走



threshold
是平衡阈值,默认是10%,值越低各节点越平衡,但消耗时间也更长。 
balancer
也可以在有mr jobcluster上运行,默认dfs.balance.bandwidthPerSec很低,为1M/s。在没有mr job时,可以提高该设置加快负载均衡时间。 
namenodehdfs-site.xml中增加设置balance的带宽,默认只有1M 

<property>

<name>dfs.balance.bandwidthPerSec</name>

<value>10485760</value><description>Specifies themaximum bandwidth that each datanode can utilize for the balancing purpose interm of the number of bytes per second.</description>

</property>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值