1. HDFS架構
HDFS是主從架構,一個NameNode作為主節點,維護管理檔案系統的中繼資料資訊,N個DataNode作為從節點,存儲實際的資料塊。
【圖檔後續補】
1.1 NameNode(簡稱NN)
維護管理檔案系統的中繼資料資訊
- 檔案目錄結構
- 檔案名稱
- 檔案屬性(權限,建立時間,副本數…)
-
檔案對應的塊(副本)與DataNode的映射關系
這個映射關系,不會持久化存儲,而是在叢集啟動和運作時,由DataNode定期發送BlockReport給NameNode,NameNode在記憶體中動态維護該映射關系
1.2 DataNode(簡稱DN)
DataNode可以分布在不同的機架(RACK)上,主要功能存儲實際的資料塊,提供資料塊的讀寫功能。
另外DataNode還會定時的跟NameNode通信
- 每隔3S(參數是dfs.heartbeat.interval)向NameNode發送一次心跳信号
- 每隔21600000MS(既6H,參數是dfs.blockreport.intervalMsec)向NameNode發送一次塊報告
2. SecondaryNameNode(簡稱SNN)
SecondaryNameNode是NameNode的一個輔助程序,會定期的合并NameNode的fsimage檔案和edits日志為新的fsimage檔案并推送給NameNode,簡稱為檢查點(checkpoint)
chekpoint預設參數
- dfs.namenode.checkpoint.period=3600 機關是S
- dfs.namenode.checkpoint.txns=1000000
2.1 SecondaryNameNode工作流程
【圖檔後續補】
- NameNode啟動時加載最新的fsimage_n和edits_n+1-n+a,并生成新的日志edits_inprogress_n+a+1
- SecondaryNameNode把fsimage_n和edits_n+1-n+a複制到SecondaryNameNode節點,把這兩個檔案合并為fsimage_n+a
- SecondaryNameNode把新的鏡像檔案fsimage_n+a推送至NameNode
- NameNode節點的edits_inprogress_n+a+1寫滿,名稱變更為edits_n+a+1-n+b
- NameNode生成新的日志edits_inprogress_n+b+1
- SecondaryNameNode定期去NameNode複制最新的fsimage檔案和edits日志,并合并為新的fsimage鏡像檔案
3. 副本放置政策
【圖檔後續補】
第一個副本
- 送出節點為DataNode,那麼第一個副本直接寫到該節點的HDFS目錄
- 叢集外送出,則随機選一個網絡和CPU較為空閑的節點
第二個副本
- 放置于與第一個副本不同機架的節點上
第三個副本
- 放置于與第二個副本同一機架的不同節點上