我有N
Hadoop DataNodes。每个都附加两个 3TB卷。每个卷都使用XFS格式化。每个卷都配置为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卷完全,然后我可以在未来扩展。
问题:对于每个节点,假设附加了 new 卷,如何在不破坏Hadoop的情况下将旧卷 s 完全迁移到新卷(即HDFS, DataNodes,NameNode等)?
我知道Hadoop's Hot Swap capabilities,但文档有点缺乏,并且没有明确说明它将块从旧卷移动到新卷。
我不需要让群集保持运行。如果我可以阻止一切并以某种方式复制所有块,那就太棒了。
答案 0 :(得分:0)
如果群集中的所有文件都有2个以上的副本。简单地一次关闭一个DN并用新的磁盘替换磁盘是安全的。 HDFS将注意重新复制过程。您需要等待DN重新启动后完全复制文件块(即运行hdfs fsck
)。
或者您可以运行DataNode停用过程,等待DataNode将所有块移出此机器。并在使用新磁盘重新启动此DataNode之后。您需要运行Balancer
来移回一些数据。
截至今天(2016年9月),没有正式的方法将 所有块 从一个磁盘移动到另一个磁盘。但是,当DataNode(或群集)关闭时,自行运行mv /mnt/vol_a/hdfs/datanode /mnt/large_vol_c/hdfs/datanode
是完全安全的。然后将dfs.data.dir
配置到新位置。