我有 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、datanodes、namenode等)的情况下将旧卷完全迁移到新卷?
我知道hadoop的热交换功能,但是文档有点缺乏,并且没有明确说明它将块从旧卷移动到新卷。
我不需要保持集群运行。如果我能停止一切,复制所有的区块,那就太好了。
1条答案
按热度按时间3gtaxfhh1#
如果群集中的所有文件都有2个以上的副本。只需一次关闭一个dn并用新磁盘替换磁盘是安全的。hdfs将负责重新复制过程。您需要等待文件块在dn重新启动后被完全复制(例如,通过运行
hdfs fsck
).或者您可以运行datanode decommission进程,等待datanode将所有块移出此计算机。在用新磁盘重新启动这个数据节点之后。你得跑了
Balancer
把一些数据移回去。直到今天(2016年9月),还没有正式的方法将所有数据块从一个磁盘移动到另一个磁盘。然而,它是完全安全的只是运行
mv /mnt/vol_a/hdfs/datanode /mnt/large_vol_c/hdfs/datanode
当datanode(或集群)关闭时,您自己。然后配置dfs.data.dir
去新的地方。