2017-06-16 75 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 –