我有 N
个 Hadoop 数据节点。每个都附加了两个 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 卷完全,然后我可以将来扩展。
问题:对于每个节点,假设附加了新卷,我如何在不破坏 Hadoop(即 HDFS、 DataNode、NameNode 等)?
我知道 Hadoop's Hot Swap capabilities , 但文档有点缺乏,它没有明确说明它将 block 从旧卷移动到新卷。
我不需要保持集群运行。如果我可以停止一切并以某种方式复制所有 block ,那就太好了。
最佳答案
如果集群中的所有文件都有 2 个以上的副本。一次简单地关闭一个 DN 并用新磁盘替换磁盘是安全的。 HDFS 将负责重新复制过程。尽管在 DN 重新启动后(即通过运行
hdfs fsck
),您需要等待文件 block 被完全复制。或者你可以运行 DataNode 退役过程,等待 DataNode 将所有 block 移出这台机器。在你用新磁盘重启这个 DataNode 之后。您需要运行
Balancer
来移回一些数据。
直到今天(2016 年 9 月),还没有官方方法可以将所有 block 从一个磁盘移动到另一个磁盘。但是,当 DataNode(或集群)关闭时,您自己运行 mv/mnt/vol_a/hdfs/datanode/mnt/large_vol_c/hdfs/datanode
是绝对安全的。然后将 dfs.data.dir
配置到新位置。
关于linux - 如何完全更改每个 Hadoop DataNode 上的底层磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35805129/