HDFS核心元件

2022-01-08 13:00:12

介紹HDFS核心元件–NameNode、Secondary NameNode、DataNode


NameNode

維護著HDFS中全部資料的後設資料,包括所儲存的檔案和目錄的後設資料。這些後設資料主要包括檔案建立/修改時間戳、存取控制列表、塊的副本資訊以及檔案當前狀態。

控制著對資料的所有操作。在HDFS上的所有操作,都需要首先通過NameNode,然後再傳遞到Hadoop的相關元件。

向用戶端提供系統資料塊資訊,以及應該從哪個資料塊進行讀/寫。

向DataNode發出一些特殊命令,如:刪除損壞的資料塊。


Secondary NameNode

作用:Secondary NameNode會週期性地從NameNode中獲取FSImage和EditLog,將兩個檔案合併成新的FSImage後,替換NameNode中的原FsImage檔案,以減少NameNode重新啟動更新FsImage檔案的時間。

FSImageEidtLog建立於部署Hadoop環境過程中的NameNode格式化(命令:hadoop namenode -format)。在HDFS中,FSImageEidtLog儲存了有關NameNode的所有操作及整個叢集的狀態後設資料,用於保持叢集重新啟動之後的狀態和上次停止前的狀態一致1

  • FSImage檔案:HDFS檔案系統存於硬碟中的所有後設資料(即全量),裡面記錄了重新啟動前HDFS檔案系統中所有目錄和檔案的序列化資訊2
  • EditLog檔案:儲存了重新啟動之後所有針對HDFS檔案系統的操作(即增量),如增加檔案、重新命名檔案、刪除目錄等操作資訊2

啟動Hadoop後,當使用者或使用者端發出操作請求,NameNode都會將後設資料寫入到EditLog中,在叢集重新啟動時再將EditLog中的後設資料依次寫入FSImage,並清空EditLog檔案。EditLog作用如下圖所示。3:

只有在NameNode重新啟動時,EditLog才會合併到FSImage檔案中,從而得到一個檔案系統的最新快照。但因為叢集中的NameNode很少重新啟動,這意味著當NameNode執行了很長時間後,EditLog檔案會變得很大。這將導致NameNode重新啟動會花費很長時間;如果NameNode掛掉,那將丟失大量後設資料資訊。

Secondary NameNode週期性合併FSImage能很好的解決以上問題,Secondary NameNode工作流程如下圖所示。

網頁埠檢視Hadoop啟動過程,http://localhost:50070


DataNode

儲存資料,以塊(block)為單位儲存資料,每個資料塊的大小預設是64M或128M、256M

處理來自使用者端的讀/寫請求,DataNode負責資料塊的建立、複製和刪除。這些操作命令來自NameNode,並由DataNode執行。

和NameNode通過heartbeat機制保持連線,週期性的向NameNode上報儲存的塊block資訊(block Report機制),若NameNode超過10分鐘沒有收到DataNode的heartbeat,則認為其已經Lost,並將Block的資訊複製到其他DataNode上,以保證副本數。


  1. HDFS 05 - HDFS 的後設資料管理(FSImage、Edits、CheckPoint) - 瘦風 - 部落格園 (cnblogs.com) ↩︎

  2. HDFS中Secondary NameNode和Standby NameNde的區別 - 簡書 (jianshu.com) ↩︎ ↩︎

  3. FSImage 和 EditsLog - 簡書 (jianshu.com) ↩︎