hdfs-site.xml:
dfs.replication 值配置3
假设我将特定文件的复制设置为 2:
./bin/hadoop dfs -setrep -w 2/path/to/file.txt
- 当NameNode收到来自DataNode的心跳时,
NameNode是否会认为是指定文件 path/to/file.txt 是否正在根据配置的复制进行复制?
如果不是,会怎样?
最佳答案
首先,为了清楚起见,我想尝试重述您的问题,以确保我理解:
NameNode 是否会将手动设置为低于默认值 (dfs.replication
) 的复制因子的文件视为复制不足?
没有。 NameNode 将每个文件的复制因子单独存储在其元数据中,即使复制因子未通过调用 -setrep
显式设置。默认情况下,每个文件的元数据将复制 dfs.replication
中指定的复制因子(在您的示例中为 3)。它可以被覆盖,例如通过调用 -setrep
。当 NameNode 检查文件是否复制不足时,它会检查存储在该单个文件的元数据中的确切复制因子,而不是 dfs.replication
。如果文件的复制因子是 2,并且它的每个 block 有 2 个副本,那么这很好,NameNode 不会认为它是复制不足的。
您的问题还提到了 DataNode 的心跳,我认为这意味着您对 DataNode 和 NameNode 之间的交互如何与复制相关感兴趣。 DataNode 和 NameNode 之间还有另一种通信形式,称为 block 报告。 block 报告是 DataNode 告诉 NameNode 它们存储了哪些 block 副本的方式。 NameNode 分析来自所有 DataNode 的 block 报告,以确定 block 是复制不足还是复制过度。如果一个 block 复制不足(例如复制因子为 2,但只有一个副本),那么 NameNode 会安排重新复制工作,以便另一个 DataNode 制作副本的副本。如果一个 block 被过度复制(例如复制因子为 3,但有 4 个副本),那么 NameNode 会安排删除其中一个副本,最终其中一个 DataNode 将在本地删除它。
关于hadoop - NameNode如何识别特定文件复制是设置值,而不是配置的复制3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44593637/