1. 程式人生 > >淺析 Secondary NameNode(輔助namenode)

淺析 Secondary NameNode(輔助namenode)

重點提示:

首先這個問題不要摳的過細。

SDNN即Secondary NameNode  NN即NameNode

1. 首先介紹NameNode節點上兩個重要檔案

(1)fsimage:它是元資料的映象檔案,映象這個東西大家都懂,所以它記錄的其實是某個時間點記憶體中元資料的狀態。而且和虛擬機器是一個道理,每次NN啟動的時候,也是先載入fsimage才能啟動。

(2)edits log: 用於操作日誌檔案,如何理解,當你像hdfs裡進行寫操作的時候,不是直接把修改寫入記憶體中(具體原因我也在問),而是寫到edits log裡成功之後再返回給記憶體。

 

2.SDNN不是NN的備份,它的作用有2個

(1)給fsimage備份(這個我沒感覺出來,也不知道什麼時候備份的)

(2)幫助NN進行【fsimage】和【edits log】的合併,這是一個非常耗費CPU的操作。

這一點是最重要的,在叢集中只有在重啟NN時fsimage才會和edits log進行合併,獲得一個最新的映象,然而實際上叢集中NN很少重啟,而這個合併操作又非常吃CPU,這就需要專門一臺機器----SDNN來做這個操作。你合併好之後,及時把最新的映象返回給NN,確保NN不會因為發生故障直接丟失了一部分最新的元資料,元資料的重要性就不贅言了。

 

 

 

 

 

 

 

 

 

 

 

 

 

(下面的文章不要看,學習是提煉而不是背書。)

————————————————————————————————————————
在初學Hadoop時,有個讓人疑惑的概念:Secondary NameNode,也叫輔助namenode。從命名看,好像是第二個namenode,用於備份主namenode,在主namenode失敗後啟動。那麼,Secondary NameNode的作用是什麼?是如何工作的?

一,NameNode 
HDFS叢集有兩類節點以管理者和工作者的工作模式執行,namenode就是其中的管理者。它管理著檔案系統的名稱空間,維護著檔案系統樹及整棵樹的所有檔案和目錄。這些資訊以兩個檔案的形式保存於記憶體或者磁碟,這兩個檔案是:名稱空間映象檔案fsimage和編輯日誌檔案edit logs ,同時namenode也記錄著每個檔案中各個塊所在的資料節點資訊。

namenode對元資料的操作過程 
 
圖中有兩個檔案: 
(1)fsimage:檔案系統對映檔案,也是元資料的映象檔案(磁碟中),儲存某段時間namenode記憶體元資料資訊。 
(2)edits log:操作日誌檔案。 
這種工作方式的特點: 
(1)namenode始終在記憶體中儲存元資料(metedata),使得“讀操作”更加快、 
(2)有“寫請求”時,向edits檔案寫入日誌,成功返回後才修改記憶體,並向客戶端返回。 
(3)fsimage檔案為metedata的映象,不會隨時同步,與edits合併生成新的fsimage。

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

二,Secondary NameNode 
上述問題的解決方案就是執行輔助namenode–Secondary NameNode,為主namenode記憶體中的檔案系統元資料建立檢查點,Secondary NameNode所做的不過是在檔案系統中設定一個檢查點來幫助NameNode更好的工作。它不是要取代掉NameNode也不是NameNode的備份, 
SecondaryNameNode有兩個作用,一是映象備份,二是日誌與映象的定期合併。兩個過程同時進行,稱為checkpoint(檢查點)。 
映象備份的作用:備份fsimage(fsimage是元資料傳送檢查點時寫入檔案); 
日誌與映象的定期合併的作用:將Namenode中edits日誌和fsimage合併,防止如果Namenode節點故障,namenode下次啟動的時候,會把fsimage載入到記憶體中,應用edits log,edits log往往很大,導致操作往往很耗時。(這也是namenode容錯的一套機制)

Secondary NameNode建立檢查點過程 


Secondarynamenode工作過程 
(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過程到此結束。 
SecondaryNameNode備份由三個引數控制fs.checkpoint.period控制週期(以秒為單位,預設3600秒),fs.checkpoint.size控制日誌檔案超過多少大小時合併(以位元組為單位,預設64M), dfs.http.address表示http地址,這個引數在SecondaryNameNode為單獨節點時需要設定。

從工作過程可以看出,SecondaryNameNode的重要作用是定期通過編輯日誌檔案合併名稱空間映象,以防止編輯日誌檔案過大。SecondaryNameNode一般要在另一臺機器上執行,因為它需要佔用大量的CPU時間與namenode相同容量的記憶體才可以進行合併操作。它會儲存合併後的名稱空間映象的副本,並在namenode發生故障時啟用。
--------------------- 
作者:楊jun堅 
來源:CSDN 
原文:https://blog.csdn.net/yangjjuan/article/details/71107012 
版權宣告:本文為博主原創文章,轉載請附上博文連結!