在hadoop中,如果我取消一个节点的使用,hadoop将在集群中重新分发文件,以便正确地复制它们。数据是否会从停用节点中删除?
我正在尝试平衡特定节点上磁盘上的数据。我计划通过取消对节点的调试,然后重新对节点进行调试来实现这一点。我是否需要在取消调试完成后从该节点删除数据,或者仅仅重新调试它就足够了(从excludes文件中删除并运行它) hadoop dfsadmin -refreshNodes
)?
更新:对我来说,取消一个节点的任务,删除该节点上的所有数据,然后重新对其进行调试是很有效的。
2条答案
按热度按时间gkn4icbw1#
hadoop目前不支持自动执行此操作。但可能会有黑客自动做到这一点。
在我看来,先停用,然后复制,然后在不同的磁盘上手动移动块,速度会很慢。
您可以在磁盘之间手动进行平衡,就像这样-
1.取下hdfs或仅取下目标数据节点。
2.使用unix mv命令将单个块和元对从主机上的一个目录移动到另一个目录。e、 g.将一对blk数据文件和blk.meta文件移动到同一主机上的磁盘上。
3.重启hdfs或datanode
程序的参考链接
附录:您可能需要在每个数据磁盘的dfs/current目录中来回移动一对blk.和blk..meta文件。e、 g.配对文件-blk_和blk_.meta
如果您不想手动执行此操作,您可能可以编写一个自定义脚本来检测每个数据磁盘的dfs/当前目录中占用了多少空间,并相应地重新平衡它们,即将blk_*和blk_*meta对从一个移动到另一个。
8zzbczxx2#
好的,当你解除datanode的任务时,它不会被删除。不过,无法在该数据节点上进一步写入。当您停用一个datanode时,该datanode持有的复制副本被标记为“已停用”复制副本,这些复制副本仍然可以进行读访问。
但是,为什么要执行此取消调试/重新调试周期?为什么不将所有磁盘指定为hdfs-site.xml中dfs.data.dir属性的逗号分隔值,然后重新启动datanode守护程序。重新启动后运行平衡器。