1. 程式人生 > 其它 >NameNode 和SecondaryNameNode的工作機制

NameNode 和SecondaryNameNode的工作機制

  思考:nameNode中元資料的是存在哪裡的呢?

  有兩個可能,一個是存在磁碟中,另一個可能是存在記憶體中。如果存在磁碟中的話,效率比較低 ,因為需要經常的隨機訪問還要給出對應的響應到客戶。如果吃存到記憶體中,一旦斷點元資料就會丟失,叢集則無法正常的工作。因此我們可以把兩者結合,在磁碟中備份元資料 FSImage.

  新問題來了。如果記憶體中資料更新的時候同時在磁碟中備份資料,會導致效率降低,如果不更新就導致資料一致性。一旦NameNode斷點會導致資料丟失。

  HDFS有一個特性是修改比較慢的特徵,此時產生一個新的檔案 Edits檔案,只追加資訊。當元資料有變動的時候,修改記憶體中元資料並追加到Edits中。如果NameNode節點斷電會合並FSImage和Edits檔案,如果資料過大斷電的時候合併依然由NameNode進行,就會浪費時間,所以會定期的對兩個檔案進行合併,且這個操作交由SecondaryNameNode來操作。

第一 階段:NameNode 啟動
(1)第一次啟動 NameNode 格式化後,建立 Fsimage 和 Edits 檔案。如果不是第一次啟
動,直接載入編輯日誌和映象檔案到記憶體。
(2)客戶端對元資料進行增刪改的請求。
(3)NameNode 記錄操作日誌,更新滾動日誌。
(4)NameNode 在記憶體中對元資料進行增刪改

第二 階段:Secondary NameNode 工作
(1)Secondary NameNode 詢問 NameNode 是否需要 CheckPoint。直接帶回 NameNode
是否檢查結果。
(2)Secondary NameNode 請求執行 CheckPoint。
(3)NameNode 滾動正在寫的 Edits 日誌。
(4)將滾動前的編輯日誌和映象檔案拷貝到 Secondary NameNode。
(5)Secondary NameNode 載入編輯日誌和映象檔案到記憶體,併合並。
(6)生成新的映象檔案 fsimage.chkpoint。
(7)拷貝 fsimage.chkpoint 到 NameNode。
(8)NameNode 將 fsimage.chkpoint 重新命名成 fsimage