5

在 Hadoop 中,如果我停用一个节点,Hadoop 将在集群中重新分配文件,以便正确复制它们。数据会从退役节点中删除吗?

我正在尝试平衡特定节点上磁盘上的数据。我计划通过停用节点然后重新启用节点来做到这一点。退役完成后我是否需要从该节点删除数据,还是只需重新启用它就足够了(从排除文件中删除并运行hadoop dfsadmin -refreshNodes)?

更新:我可以停用一个节点,删除该节点上的所有数据,然后重新启用它。

4

2 回答 2

1

AFAIK,当您退役时,数据不会从 DataNode 中删除。但是,无法在该 DataNode 上进行进一步的写入。当您停用 DataNode 时,该 DataNode 持有的副本被标记为“已停用”的副本,它们仍然有资格进行读取访问。

但是为什么要执行这个停用/重新启用循环?为什么不将所有磁盘指定为 hdfs-site.xml 中的 dfs.data.dir 属性的逗号分隔值并重新启动 DataNode 守护程序。重启后运行平衡器。

于 2013-07-24T18:45:45.367 回答
0

Hadoop 目前不支持自动执行此操作。但是可能有一些黑客可以自动执行此操作。

在我看来,退役然后复制会很慢,然后手动跨不同磁盘移动块。

您可以通过磁盘手动进行平衡,如下所示 -

1 .取下 HDFS 或仅删除您要定位的数据节点。

2 .使用 UNIX mv 命令将单个块和元对从主机上的一个目录移动到另一个目录。例如,移动成对的 blk 数据文件和 blk.meta 文件以跨越同一主机上的磁盘。

3.重启HDFS或datanode

该过程的参考链接

附录: 您可能需要将blk_*blk_*.meta文件对移入和移出每个数据磁盘的dfs/current目录。例如对文件 - blk_3340211089776584759 和 blk_3340211089776584759_1158.meta

如果您不想手动执行此操作,您可以编写一个自定义脚本来检测每个数据磁盘的dfs/current目录中占用了多少空间并相应地重新平衡它们,即移动 blk_* 和 blk_ 对*.meta 从一个到另一个。

于 2013-07-25T07:20:02.533 回答