HDFS-site.xml中:
dfs.replication值配置3
假设我将特定文件的复制设置为2:
./ bin / hadoop dfs -setrep -w 2 /path/to/file.txt
将NameNode视为指定文件 path / to / file.txt是否按照配置的复制进行复制?
如果没有,它将如何?
答案 0 :(得分:2)
首先,我想尝试重述您的问题,以确保我明白:
NameNode会将手动设置为低于默认值(dfs.replication
)的复制因子的文件视为不足复制吗?
没有。 NameNode将每个文件的复制因子分别存储在其元数据中,即使未通过调用-setrep
显式设置复制因子也是如此。默认情况下,每个文件的元数据将复制dfs.replication
中指定的复制因子(在您的示例中为3)。它可能会被覆盖,例如通过调用-setrep
。当NameNode检查文件是否未被复制时,它会检查存储在该单个文件的元数据中的确切复制因子,而不是dfs.replication
。如果文件的复制因子是2,并且每个块有2个副本,那么这很好,并且NameNode不会认为它不足以复制。
您的问题还提到了DataNodes的心跳,我认为这意味着您对DataNode和NameNodes之间的交互如何与复制相关联感兴趣。 DataNode和NameNodes之间还有另一种称为块报告的通信形式。块报告是DataNodes告诉NameNodes阻止它们存储的副本的方法。 NameNode分析来自所有DataNode的块报告,以确定块是否未被复制或过度复制。如果块未被复制(例如复制因子为2,但只有一个副本),则NameNode会调度重新复制工作,以便另一个DataNode制作副本的副本。如果块被过度复制(例如复制因子为3,但有4个副本),则NameNode会调度其中一个要删除的副本,最终其中一个DataNode将在本地删除它。