本节书摘来异步社区《Hadoop MapReduce实战手册》一书中的第2章,第2.4节,作者: 【美】Srinath Perera , Thilina Gunarathne 译者: 杨卓荦 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.4 DataNode下架
Hadoop MapReduce实战手册
有些时候你可能想让一个HDFS集群的一个或多个数据节点下架。本节展示了如何优雅地让使用中的DataNode下架而不会导致数据丢失,而且无需重新启动集群。
操作步骤
下列步骤显示了如何让数据节点优雅地下架。
- 如果集群没有排除文件配置,则需要向集群中添加一个排除文件(exclude file)。在NameNode上创建一个空文件,并且通过添加以下属性从conf/hdfs-site.xml文件指向它。
<property>
<name>dfs.hosts.exclude</name>
<value>[FUL_PATHTO_THE_EXCLUDE_FILE_]</value>
<description>Names a file that contains a list of hosts thatare
not permitted to connect to the namenode. The full pathname of
the file must be specified. If the value is empty, no hosts are
excluded.</description>
</property>
- 将要下架的节点的主机名添加到exclude文件中。
- 运行下列命令以重新加载NameNode的配置。这将启动下架过程。下架过程可能需要相当一段时间,因为它需要确保数据块的复制操作没有影响集群的其他任务。
>bin/hadoopdfsadmin -refreshNodes
- 下架进度显示在HDFS中用户界面下的Decommissioning Nodes页面。也可以使用下面的命令监控下架进度。不要关闭这些下架中节点,直到下架完成。
>bin/hadoopdfsadmin -report
...
...
Name: myhost:50010
Decommission Status : Decommission in progress
Configured Capacity: ...
...
- 当想要把这些节点重新添加回集群时,可以从exclude文件中删除节点,执行bin/Hadoop
dfsadmin –refreshNodes命令。
- 下架过程可以通过从exclude文件中删除该节点的名称、然后执行bin/hadoopd dfsadmin
-refreshNodes命令来停止。
工作原理
在节点下架时,HDFS会将该节点中的块复制到集群中的其他节点。下架可能是一个非常缓慢的过程,因为HDFS故意使它缓慢地运行,以避免集群过载。如果直接关闭节点,而不采用下架,可能会导致数据丢失。
下架完成后,将不再允许exclude文件所提及的节点与NameNode通信。