在Hadoop中,如果我停用一个节点,Hadoop将在整个群集中重新分发文件,以便正确复制它们。是否会从已退出的节点中删除数据?
我正在尝试平衡特定节点上磁盘的数据。我计划通过解除节点然后重新组合节点来做到这一点。在撤销完成后是否需要从该节点删除数据,或者只需重新安装它就足够了(将其从排除文件中删除并运行hadoop dfsadmin -refreshNodes
)?
更新:我可以解除节点,删除该节点上的所有数据,然后重新发布它。
答案 0 :(得分:1)
AFAIK,当您停用数据时,不会从DataNode中删除数据。但是,对该DataNode的进一步写入是不可能的。当您停用DataNode时,该DataNode持有的副本将标记为“已停用”的副本,这些副本仍有资格进行读取访问。
但是你为什么要执行这个decomission / recomissioning循环呢?为什么不直接将所有磁盘指定为hdfs-site.xml中dfs.data.dir属性的逗号分隔值并重新启动DataNode守护进程。重启后运行平衡器。
答案 1 :(得分:0)
Hadoop目前不支持自动执行此操作。但是可能会有黑客自动执行此操作。
退役然后复制,在我看来会很慢,然后在不同磁盘上手动移动块。
您可以在磁盘上手动进行平衡,如下所示 -
1 。关闭HDFS或仅关注您定位的datanode。
2 。使用UNIX mv命令将单个块和元对从主机上的一个目录移动到另一个目录。例如。 将blk数据文件和blk.meta文件对移动到同一主机上的磁盘上。
3 。重新启动HDFS或datanode
Reference link for the procedure
<强>附录:强> 您可能需要在每个数据磁盘的 dfs / current 目录中移入 blk _ * 和 blk _ * .metanet 文件。例如。配对文件 - blk_3340211089776584759和blk_3340211089776584759_1158.meta
如果您不想手动执行此操作,您可以编写一个自定义脚本来检测每个数据磁盘的 dfs / current 目录中占用多少并重新平衡因此,他们将blk_ *和blk _ *。meta对从一个移动到另一个。