1. 程式人生 > >關於HDFS的NameNode、Secondary NameNode、BackupNode的作用解釋

關於HDFS的NameNode、Secondary NameNode、BackupNode的作用解釋

先來解釋一下HDFS幾個節點作用:
1.NameNode節點
A.執行在單個節點伺服器上作為主處理器
B.存有檔案的元資料(哪個資料塊在哪裡,比如名稱空間資訊,塊資訊等。當它執行的時候,這些資訊是存在記憶體中的。但是這些資訊也可以持久化到磁碟上。)
C. 直接訪問檔案的客戶端
在這裡插入圖片描述

fsimage - 它是在NameNode啟動時對整個檔案系統的快照(檔案系統映象檔案)
edit logs - 它是在NameNode啟動後,對檔案系統的改動序列(其實就是操作記錄日誌)
這種工作方式的特點:
(1)namenode始終在記憶體中儲存元資料(metedata),使得“讀操作”更加快、
(2)有“寫請求”時,向edits檔案寫入日誌,成功返回後才修改記憶體,並向客戶端返回。
(3)fsimage檔案為metedata的映象,不會隨時同步,與edits合併生成新的fsimage。

edits檔案會在叢集執行的過程中不斷增多,佔用更多的儲存空間,雖然有合併,但是隻有在namenode重啟時才會進行。並且在實際工作環境很少重啟namenode,
這就帶來了一下問題:
(1)edits檔案不斷增大,如何儲存和管理?
(2)因為需要合併大量的edits檔案生成fsimage,導致namenode重啟時間過長。
(3)一旦namenode宕機,用於恢復的fsiamge資料很舊,會造成大量資料的丟失。

2.SecondaryNameNode(Checkpoint Node)
A.它的職責是合併NameNode的edit logs到fsimage檔案中,而非熱點容錯。
B.它只是NameNode的一個助手節點,目的是在HDFS中提供一個檢查點,維持NameNode的元資料拷貝。
在這裡插入圖片描述


日誌與映象的定期合併總共分五步:

1.SecondaryNameNode通知NameNode準備提交edits檔案,此時主節點產生edits.new
2.SecondaryNameNode通過http get方式獲取NameNode的fsimage與edits檔案(在SecondaryNameNode的current同級目錄下可見到 temp.check-point或者previous-checkpoint目錄,這些目錄中儲存著從namenode拷貝來的映象檔案)
3.SecondaryNameNode開始合併獲取的上述兩個檔案,產生一個新的fsimage檔案fsimage.ckpt
4.SecondaryNameNode用http post方式傳送fsimage.ckpt至NameNode
5.NameNode將fsimage.ckpt與edits.new檔案分別重新命名為fsimage與edits,然後更新fstime,整個checkpoint過程到此結束。 在新版本的hadoop中(hadoop0.21.0),SecondaryNameNode兩個作用被兩個節點替換, checkpoint 6.node與backup node. SecondaryNameNode備份由三個引數控制fs.checkpoint.period控制週期,fs.checkpoint.size控制日誌檔案超過多少大小時合併, dfs.http.address表示http地址,這個引數在SecondaryNameNode為單獨節點時需要設定。

3.DataNode
A. 一般執行在叢集中所有節點
B.堵塞 creation/replication/deletion/reads
C.從NameNode獲取等級次序
在這裡插入圖片描述
DataNode是檔案儲存的基本單元,使用者寫入資料首先在namenode中登記元資料,哪個資料塊在哪個伺服器上:黃色在1號節點,紅色的2號節點 綠色在3號節點。然後HDFS在節點之間複製這些資料塊。寫檔案完成後,當我們開始讀檔案時,讀檔案由於是並行讀取,因此讀取時間會提高三倍。同時DataNode週期性地將所有存在的Block資訊報告給NameNode,以完成NameNode元資料資訊更新。

4.BackupNode
備份節點,這個結點的模式有點像 mysql 中的主從結點複製功能, NN 可以實時的將日誌傳送給 BN ,而 SNN 是每隔一段時間去 NN 下載 fsimage 和 edits 檔案,而 BN 是實時的得到操作日誌,然後將操作合併到 fsimage 裡。在 NN 裡提供了二個日誌流介面: EditLogOutputStream 和 EditLogInputStream 。即當 NN 有日誌時,不僅會寫一份到本地 edits 的日誌檔案,同時會向 BN 的網路流中寫一份,當流緩衝達到閥值時,將會寫入到 BN 結點上, BN 收到後就會進行合併操作,這樣來完成低延遲的日誌複製功能。

參考:https://blog.csdn.net/zhanyuanlin/article/details/78077977
https://www.tuicool.com/articles/nYZnauM