如何减少 HDFS 目录中的复制因子及其影响
Posted
技术标签:
【中文标题】如何减少 HDFS 目录中的复制因子及其影响【英文标题】:How to reduce the replication factor in a HDFS directory and it's impact 【发布时间】:2017-07-19 06:44:00 【问题描述】:我们使用的是 Hortonworks HDP 2.1 (HDFS 2.4),复制因子为 3。 我们最近停用了一个数据节点,这在集群中留下了很多复制不足的块。
集群现在试图通过在其他节点之间分布复制块来满足复制因子。
如何停止该过程。我可以接受某些文件只复制两次。如果我将该目录中的复制因子更改为 2,该进程会终止吗?
对于包含 3 个副本的文件的目录,将复制因子设为 2 会产生什么影响。集群是否会启动另一个进程以删除每个文件的多余副本,每个文件有 3 个副本?
感谢您对此的帮助。也请分享参考资料。 谢谢。 萨吉瓦。
【问题讨论】:
HDFS replication factor change的可能重复 【参考方案1】:我们最近停用了一个数据节点,这在集群中留下了很多复制不足的块。
如果 DataNode 被正常停用,那么它不应该导致复制不足的块。但是,作为一个边缘情况,如果停用一个节点会使总节点数低于在文件上设置的复制因子,那么根据定义,该文件的块将被复制不足。 (例如,考虑一个具有 3 个 DataNode 的 HDFS 集群。停用一个节点会导致剩余 2 个 DataNode,因此现在复制因子为 3 的文件具有复制不足的块。)
在退役期间,HDFS 将托管在该 DataNode 上的块重新复制(复制)到集群中的其他 DataNode,以便保持所需的复制因子。更多细节在这里:
How do I correctly remove nodes in Hadoop? Decommission DataNodes如何停止该过程。我可以接受某些文件只复制两次。如果我将该目录中的复制因子更改为 2,该进程会终止吗?
没有确定性的方法可以终止整个过程。但是,如果您将某些复制不足的文件的复制因子降低到 2,则 NameNode 将停止为这些文件的块调度重新复制工作。这意味着对于这些文件的块,HDFS 将停止跨不同 DataNode 复制新副本。
从容错的角度来看,典型的复制因子 3 是可取的。您可以考虑稍后将这些文件的复制因子设置回 3。
对于包含 3 个副本的文件的目录,将复制因子设为 2 会产生什么影响。集群是否会启动另一个进程以删除每个具有 3 个副本的文件的多余副本?
是的,NameNode 会将这些文件标记为过度复制。作为响应,它将在 DataNode 上安排块删除以恢复所需的复制因子 2。这些块删除被异步分派到 DataNode,以响应它们的心跳。在 DataNode 中,块删除异步执行以清除磁盘中的底层文件。
Apache Hadoop Wiki 中描述了更多详细信息。
【讨论】:
"那么它不应该导致复制不足的块。"不完全正确。如果机器数等于replication factor,退役后机器数低于这个系数,所以有underreplicated block是正常的。 @banuj,感谢您的评论。我已经编辑了答案,提到了将集群缩小到小于文件复制因子的边缘情况。以上是关于如何减少 HDFS 目录中的复制因子及其影响的主要内容,如果未能解决你的问题,请参考以下文章