NameNode如何识别特定文件复制是设置值,而不是配置的复制3?
How NameNode recognizes that the specific file replication is set value, than configured replication 3?
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,并且它的每个块有2个副本,那么这很好,NameNode不会认为它是复制不足的。
您的问题还提到了 DataNode 的心跳,我认为这意味着您对 DataNode 和 NameNode 之间的交互如何与复制相关感兴趣。 DataNode 和 NameNode 之间还有另一种通信形式,称为块报告。块报告是 DataNode 告诉 NameNode 它们存储了哪些块副本的方式。 NameNode 分析来自所有 DataNode 的块报告,以确定块是复制不足还是复制过度。如果一个块复制不足(例如复制因子为 2,但只有一个副本),那么 NameNode 会安排重新复制工作,以便另一个 DataNode 制作副本的副本。如果一个块被过度复制(例如复制因子是3,但有4个副本),那么NameNode会安排删除其中一个副本,最终其中一个DataNode会在本地删除它。
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,并且它的每个块有2个副本,那么这很好,NameNode不会认为它是复制不足的。
您的问题还提到了 DataNode 的心跳,我认为这意味着您对 DataNode 和 NameNode 之间的交互如何与复制相关感兴趣。 DataNode 和 NameNode 之间还有另一种通信形式,称为块报告。块报告是 DataNode 告诉 NameNode 它们存储了哪些块副本的方式。 NameNode 分析来自所有 DataNode 的块报告,以确定块是复制不足还是复制过度。如果一个块复制不足(例如复制因子为 2,但只有一个副本),那么 NameNode 会安排重新复制工作,以便另一个 DataNode 制作副本的副本。如果一个块被过度复制(例如复制因子是3,但有4个副本),那么NameNode会安排删除其中一个副本,最终其中一个DataNode会在本地删除它。