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
如果我们停用一个数据节点,而该节点上正在写入 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