NameNode 如何识别特定文件复制是设置值,而不是配置的复制 3?



hdfs-site.xml:

dfs.replication 值配置 3


假设我将特定文件的复制设置为 2:

./bin/hadoop dfs -setrep -w 2/path/to/file.txt

  1. 当 NameNode 从 DataNode 接收到检测信号时,

将名称节点视为指定文件 路径/到/文件.txt是否在根据配置的复制进行复制?

如果没有,会怎么样?

首先,为了清楚起见,我想尝试重申您的问题,以确保我理解:

NameNode 是否会将手动设置为低于默认值 (dfs.replication) 的复制因子的文件视为复制不足?

不。 NameNode 将每个文件的复制因子单独存储在其元数据中,即使复制因子不是通过调用-setrep显式设置的。 默认情况下,每个文件的元数据将复制dfs.replication中指定的复制因子(示例中为 3)。 它可能会被覆盖,例如通过调用-setrep。 当 NameNode 检查文件是否复制不足时,它会检查存储在该单个文件的元数据中的确切复制因子,而不是dfs.replication。 如果文件的复制因子为 2,并且其每个块有 2 个副本,则这很好,NameNode 不会认为它复制不足。

您的问题还提到了来自 DataNode 的心跳,我认为这意味着您对 DataNode 和 NameNode 之间的交互与复制的关系感兴趣。 DataNodes和NameNodes之间还有另一种形式的通信,称为块报告。 块报告是 DataNode 告诉 NameNode 它们存储哪些块副本的方法。 NameNode 分析来自所有 DataNode 的块报告,以确定块是复制不足还是过度复制。 如果一个块复制不足(例如,复制因子为 2,但只有一个副本),则 NameNode 会安排重新复制工作,以便另一个 DataNode 创建副本的副本。 如果一个块被过度复制(例如,复制因子为 3,但有 4 个副本),则 NameNode 会计划删除其中一个副本,最终其中一个 DataNode 将在本地删除它。

最新更新