namenode如何找到空的datanode? 當客戶端發出寫入datanode的請求時。 通過哪種算法?namenode如何找到空datanode?
回答
你的問題的答案很複雜。在大多數情況下,作爲Hadoop的用戶或者甚至是HDFS的管理員,您可能不需要關心NameNode如何確定要將塊寫入哪個節點。但是,如果你真的很好奇,看看以下資源:
從Hadoop的權威指南的「Anatomy of a File Write」:
客戶端通過調用創建(上 DistributedFileSystem創建文件)(圖3-3中的步驟1)。 DistributedFileSystem 對namenode進行RPC調用,以在 文件系統的名稱空間中創建一個新文件,並且沒有與其關聯的塊(步驟2)。 namenode執行各種檢查以確保該文件不存在 ,並且該客戶端有權創建 該文件。如果這些檢查通過,namenode會記錄新的 文件;否則,文件創建失敗,並拋出IOException異常。 DistributedFileSystem返回一個FSDataOutputStream 供客戶端開始寫入數據。就像在讀取的情況下一樣, FSDataOutputStream封裝了一個DFSOutputStream,它處理與datanodes和namenode的 通信。
當客戶端寫入數據(步驟3)時,DFSOutputStream將其拆分爲 數據包,它將數據寫入內部隊列,稱爲數據隊列。 數據隊列由DataStreamer使用,其責任 它要求namenode通過選擇合適的數據節點列表來分配新塊以存儲副本。數據節點列表形成一個流水線 - 我們假設複製級別爲3,所以在流水線中有三個節點 。 DataStreamer將數據包流式傳輸到管道中的第一個數據節點,即 ,數據包存儲該數據包,然後 將數據包轉發到管道中的第二個數據節點。同樣,第二個datanode存儲數據包並將其轉發給流水線中的第三個數據節點(最後一個數據節點爲 )。
您還可以檢查出從最新的穩定ASF Hadoop的源代碼,如果你想一步通過它: https://github.com/apache/hadoop-common/blob/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java#L346
- 1. Hadoop namenode無法找到datanode
- 2. 無法啓動Namenode,Secondary Namenode和Datanode
- 3. 否Namenode或Datanode或Secondary NameNode停止
- 4. Hadoop NameNode和DataNode插件
- 5. hadoop namenode,datanode,secondarynamenode未啓動
- 6. Hadoop(NameNode,DataNode和SecondaryNameNode)Not Starting
- 7. Hadoop Datanode,namenode,secondary-namenode,job-tracker和任務跟蹤器
- 8. Namenode格式不釋放datanode磁盤空間
- 9. 沒有顯示namenode的活動datanode
- 10. Datanode的開始而不是NameNode的
- 11. NameNode DataNode讀取操作通信
- 12. Hadoop文件系統副本 - namenode vs datanode
- 13. datanode在hdfs下沒有「namenode」目錄
- 14. Hadoop中的NameNode和DataNode會的大小
- 15. datanode和namenode中的不兼容clusterIDs
- 16. Namenode如何決定在哪個datanode中寫一個塊
- 17. /etc/hosts文件如何影響datanode和namenode之間的連接?
- 18. 爲什麼datanode將塊位置信息發送到namenode?
- 19. 何處安裝Hive(在DataNode或Namenode上)以及爲什麼?
- 20. namenode/master和datanode/slave上的不同HADOOP_HOME不允許從namenode/master啓動集羣
- 21. Hadoop Datanodes找不到NameNode
- 22. 在Hadoop中,Namenode將如何獲取機架細節和屬於機架的datanode?
- 23. Datanode和Namenode運行但未反映在UI
- 24. DataNode無法與Hadoop 2.2中的NameNode進行通信
- 25. Namenode和Datanode服務沒有以single_mode運行
- 26. 有沒有辦法使用eclipse來調試hadoop的namenode或datanode?
- 27. 的DataNode和NameNode的服務沒有啓動
- 28. Hadoop 2.2 namenode正在運行,但datanode未運行
- 29. 節點管理器的NameNode的ResourceManager的DataNode SecondaryNameNode沒有運行
- 30. 錯誤,而在上面的代碼開始NameNode和DataNode會
感謝你jtravaglini –