如何彻底更改每个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
配置到新位置。