Hadoop动态添加删除datanode及tasktracker
来源:互联网 发布:台湾手机网络制式 编辑:程序博客网 时间:2024/05/28 01:36
首先建议datanode和tasktracker分开写独立的exclude文件,因为一个节点即可以同时是datanode和tasktracker,也可以单独是datanode或tasktracker。
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.hosts和dfs.hosts.exclude,则禁止连入。
具体步骤
(1)将要删除的datanode加入到dfs.hosts.exclude指定的文件中。(最好使用主机名,IP有时可能不生效)
(2)动态刷新配置,不需要重启namenode
hadoop dfsadmin -refreshNodes
(3)通过hadoop dfsadmin -report或webui,可以看到,该datanode的状态为Decommissioning
(4)等待一段时间,该节点为dead状态。
(5)删除dfs.hosts文件中该节点
(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以后,webui和hadoopdfsadmin -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中存在该IP,Nodes中仍然存在该tasktracker的hostname。
解决的办法就是,在exclude中使用hostname而不使用IP。
判断是否真正生效:如果exclued文件中正确的填写了要失效的node,则总得nodes数量应该减小。
4、添加tasktracker
如果存在mapred.hosts文件,且不为空,则添加新的tasktracker到该文件中,refreshNodes。
到新节点上,启动即可
/usr/local/hadoop/bin/hadoop-daemon.sh start tasktracker
如果不存在mapred.hosts文件,或文件为空,直接启动新节点即可。
5、添加或删除datanode后,平衡磁盘利用率
运行bin/start-balancer.sh,这个会很耗时间
注:如果不balance,那么cluster会把新的数据都存放在新的node上,这样会降低mr的工作效率;
/usr/local/hadoop/bin/start-balancer.sh -threshold 0.1
threshold 是平衡阈值,默认是10%,值越低各节点越平衡,但消耗时间也更长。
balancer也可以在有mr job的cluster上运行,默认dfs.balance.bandwidthPerSec很低,为1M/s。在没有mr job时,可以提高该设置加快负载均衡时间。
在namenode的hdfs-site.xml中增加设置balance的带宽,默认只有1M:
<property> <name>dfs.balance.bandwidthPerSec</name> <value>10485760</value><description> Specifies the maximum bandwidth that each datanode canutilize for the balancing purpose in term of the number of bytes per second. </description> </property>
- Hadoop动态添加删除datanode及tasktracker
- Hadoop动态添加删除datanode及tasktracker
- Hadoop动态添加删除datanode及tasktracker
- cui-----Hadoop动态添加删除datanode及tasktracker【需要整理】
- hadoop 添加删除datanode及tasktracker
- 【转】hadoop 添加删除datanode及tasktracker
- Hadoop 添加删除DataNode 和 TaskTracker
- 动态添加删除datanode以及tasktracker
- Hadoop2.2.0动态添加,删除datanode,tasktracker
- hadoop 中添加和删除 datanode和tasktracker(一)
- hadoop 中添加和删除 datanode和tasktracker(二)
- [Nutch]Hadoop动态删除DataNode节点和TaskTracker节点
- hadoop动态增加 datanode和tasktracker的方法
- [Nutch]Hadoop动态增加DataNode节点和TaskTracker节点
- Hadoop动态添加/删除节点(datanode和tacktracker)
- Hadoop datanode添加与删除
- hadoop datanode 和 tasktracker起不来。
- 【转 】Hadoop datanode添加与删除
- Hadoop中mapred包和mapreduce包的区别
- TortoiseSVN提交文件时'svn/!svn/me'path not found的解决
- C++统计字符串中(文件中)单词个数
- 【Android 开发教程】动态添加Fragments
- 解析网页源代码中的115网盘链接
- Hadoop动态添加删除datanode及tasktracker
- 【Android 开发教程】Fragment的生命周期
- MFC鼠标离开消息
- linux下用cron定时执行任务的方法
- java 实现伪静态地址
- Visual Studio 2010(.NET 4.0)中使用SQLite.NET
- Android保持屏幕常亮,PowerManager.WakeLock的使用
- Android开发环境搭建全程演示(jdk+eclipse+android sdk)
- ADB server didn't ACK * failed to start daemon * 解决方法