如何彻底更改每个Hadoop DataNode上的底层磁盘?

问题描述:

我有N Hadoop DataNodes。每个已附加两个 3TB卷。每个卷都使用XFS进行格式化。每个卷都配置为DataNode的数据目录。例如:如何彻底更改每个Hadoop DataNode上的底层磁盘?

$ df -Th 
/dev/xvdb1  xfs  3.0T 2.0T 1.1T 65% /mnt/vol_a 
/dev/xvdc1  xfs  3.0T 1.3T 1.8T 41% /mnt/vol_b 

$ cat hdfs-site.xml 
... 
<property> 
    <name>dfs.data.dir</name> 
    <value>/mnt/vol_a/hdfs/datanode,/mnt/vol_b/hdfs/datanode</value> 
</property> 
... 

目标:我想替换两个3 TB卷完全用新逻辑卷不同盘,它然后我可以在未来扩展。

问题:对于每个节点,假设体积附着,如何完全迁移旧卷小号到新的卷而不断裂的Hadoop(即HDFS,的DataNodes,NameNode的等)?

我知道Hadoop's Hot Swap capabilities,但文档有点缺乏,它没有明确说明它将块从旧卷移动到新卷。

我做不是需要保持集群运行。如果我能够阻止一切并以某种方式复制所有块,那太棒了。

  • 如果群集中的所有文件都有2+个副本。一次只关闭一个DN是安全的,并用新的更换磁盘。 HDFS将照顾重新复制过程。在DN重新启动后(即通过运行hdfs fsck),您需要等待完全复制的文件块。

  • 或者你也可以运行DataNode退役进程,等待DataNode将所有的块移出本机。用新磁盘重新启动此DataNode后。您需要运行Balancer以将一些数据移回。

截至今日(SEP 2016),还有从一个磁盘移动所有块到另一个磁盘上没有正式的办法。但是,在DataNode(或集群)关闭时,自己运行mv /mnt/vol_a/hdfs/datanode /mnt/large_vol_c/hdfs/datanode是完全安全的。然后将dfs.data.dir配置到新位置。