Datanode退役与写入

Datanode decommisioning vs Write

如果我们停用一个数据节点,而该节点上正在写入 HDFS,会发生什么情况?

它会停止将数据写入该节点上的 HDFS 并停用该节点,还是完成写入然后停用它。

Hadoop wiki 所述:

Hadoop 提供退役功能以淘汰一组现有数据节点。要退役的节点应包含在排除文件中,排除文件名应指定为配置参数dfs.hosts.exclude。这个文件应该是在namenode启动的时候指定的。

排除文件属性命名一个文件,其中包含不允许连接到名称节点的主机列表。

发生这种情况时,我认为 IOException 是通过写入已退役节点的进程获得的。

为要停用的节点添加条目后。您需要执行 namenode -refreshnodes 命令来开始实际的退役过程。退役的实际过程非常缓慢。所有当前任务 read/write 将照常继续。但是不允许所有未来的写入,但允许以最低优先级读取。同时所有的块都被复制到其他节点。

我在cloudera中找到了解决方法。

停用仅适用于 HDFS DataNode、MapReduce TaskTracker、YARN NodeManager 和 HBase RegionServer 角色。如果主机上有其他角色 运行,则这些角色是 stopped/killed。

http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cm_mc_decomm_host.html