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

时间:2016-03-04 20:05:26

标签: linux hadoop hdfs

我有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,但文档有点缺乏,并且没有明确说明它将块从旧卷移动到新卷。

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

1 个答案:

答案 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配置到新位置。