介紹HDFS核心元件–NameNode、Secondary NameNode、DataNode
維護著HDFS中全部資料的後設資料,包括所儲存的檔案和目錄的後設資料。這些後設資料主要包括檔案建立/修改時間戳、存取控制列表、塊的副本資訊以及檔案當前狀態。
控制著對資料的所有操作。在HDFS上的所有操作,都需要首先通過NameNode,然後再傳遞到Hadoop的相關元件。
向用戶端提供系統資料塊資訊,以及應該從哪個資料塊進行讀/寫。
向DataNode發出一些特殊命令,如:刪除損壞的資料塊。
作用:Secondary NameNode會週期性地從NameNode中獲取FSImage和EditLog,將兩個檔案合併成新的FSImage後,替換NameNode中的原FsImage檔案,以減少NameNode重新啟動更新FsImage檔案的時間。
FSImage
和EidtLog
建立於部署Hadoop環境過程中的NameNode格式化(命令:hadoop namenode -format
)。在HDFS中,FSImage
和EidtLog
儲存了有關NameNode的所有操作及整個叢集的狀態後設資料,用於保持叢集重新啟動之後的狀態和上次停止前的狀態一致1
啟動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
儲存資料,以塊(block)為單位儲存資料,每個資料塊的大小預設是64M或128M、256M
處理來自使用者端的讀/寫請求,DataNode負責資料塊的建立、複製和刪除。這些操作命令來自NameNode,並由DataNode執行。
和NameNode通過heartbeat機制保持連線,週期性的向NameNode上報儲存的塊block資訊(block Report機制),若NameNode超過10分鐘沒有收到DataNode的heartbeat,則認為其已經Lost,並將Block的資訊複製到其他DataNode上,以保證副本數。