linux - 如何完全更改每个 Hadoop DataNode 上的底层磁盘?

标签 linux hadoop hdfs

我有 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/

相关文章:

linux - 如何使用 Go 在 Linux 中检查文件的权限

hadoop - 除 select * 外的任何配置单元查询挂起

amazon-web-services - 尝试从本地计算机访问 AWS 上的 HDFS 文件时出现错误

java - 在 Hadoop 2.2.0 中打开缓存文件

hadoop:如何显示put命令的执行时间?或者如何显示在 hdfs 中加载文件的持续时间?

hadoop - MapReduce 洗牌/排序方法

linux - 我如何使用 Bash 切割开始和结束的部分?

linux - Web应用程序无法创建和写入新目录

linux - bash ps 命令从字符串执行时返回错误

hadoop - java.net.ConnectException : Your endpoint configuration is wrong;