2017-06-16 30 views
1

HDFS-site.xml中:NameNode如何识别特定的文件复制设置值,比配置的复制3?

配置dfs.replication值3


假定i设置一个特定的文件的复制,以2:

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

  1. 当NameNode收到听到从数据节点tbeat,

威尔NameNode会考虑为指定的文件 路径/到/ file.txt的是在复制按照配置的复制或没有?

如果不是,它将如何?

+0

你不清楚你的疑问是什么以及你想问什么。在Hadoop中复制就像将一个块复制到另一个数据节点一样简单,就像在任何FS中复制文件一样。通过考虑像心跳这样的东西,你可以完成复杂的事情。 – philantrovert

回答

2

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

请问NameNode会考虑已手动设置为一个复制因子文件低于默认值(dfs.replication )被低复制?

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

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

+0

谢谢克里斯的解释。 – BigData

+0

@Nireekshan,如果这有帮助,那么请考虑接受答案。 https://stackoverflow.com/help/someone-answers –