如何减少 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 目录中的复制因子及其影响的主要内容,如果未能解决你的问题,请参考以下文章

如何去计算hdfs中namenode中所需的堆内存大小

量化投资中的因子是什么?因子是如何分类的,包括哪些?

量化投资中的因子是什么?因子是如何分类的,包括哪些?

SCI综合影响因子高的期刊都有哪些

Debezium 创建新主题时如何编辑复制因子

因子投资:寻找对股价有直接影响的因素