【Hadoop學習】Secondary NameNode解讀

Secondary NameNode從它的名字上來看,給人的感受是NameNode的備份。但實際上不是這樣。那到底Secondary NameNode在HDFS中扮演的是什麼角色呢?node

從名字上來看Secondary NameNode與NameNode,都包含着NameNode,這二者是否是存在某種關係呢,先來看下NameNode是幹什麼的。微信

NameNode

NameNode主要是用來保存HDFS的元數據信息,好比命名空間信息,快信息等。當它運行的時候,這些信息會保存在內存中。同時這部分信息也會持久化到磁盤上。oop

  • fsimage:是在NameNode啓動時對整個文件系統的快照
  • edits:在NameNode啓動後,對文件系統改動序列

只有在NameNode重啓時,edits纔會合併到fsimage文件中,從而獲得一個文件系統的最新快照。可是在產品集羣中NameNode是不多重啓的,這也意味着當NameNode運行了很長時間後,edits文件會變得很大。就會面臨以下問題:網站

  1. edits文件會變的很大,怎麼去管理這個文件是一個挑戰
  2. NameNode的重啓會花費很長時間,由於有不少edits中改動要合併到fsimage文件上。
  3. 若是NameNode掛掉了,就會丟失了不少改動,由於此時的fsimage文件很是舊。

這個時候Secondary NameNode就出場了,Secondary NameNode能夠來幫助解決上面問題,它的職責就是用來合併NameNode的edits到fsimage中。spa

Secondary NameNode

HDFS文件系統的寫操做不是直接被修改到fsimage中,而是edits中,Secondary NameNode節點負責將二者進行整合。日誌

checkpoint過程以下:視頻

  1. Secondary Namenode請求Namenode中止使用edits文件,暫時將新的寫操做記錄到一個新文件中,如edits.new。
  2. Secondary Namenode節點從Namenode節點獲取fsimage和edits文件(採用HTTP GET)
  3. Secondary Namenode將fsimage文件載入到內存,逐一執行edits文件中的操做,建立新的fsimage文件
  4. Secondary Namenode將新的fsimage文件發送回Namenode(使用HTTP POST)
  5. Namenode節點將從Secondary Namenode節點接收的fsimage文件替換舊的fsimage文件,用步驟1產生的edits.new文件替換舊的edits文件(即更名)。同時更新fstime文件來記錄檢查點執行的時間
    注:從Hadoop0.21.0開始,輔助Namenode已經放棄不用,由checkpoint節點取而代之,功能不變。新版本同時引入一種新的Namenode,名爲BackupNode。

Secondary NameNode的整個目的在HDFS中提供一個Checkpoint Node,它只是NameNode的一個助手節點進程

如今,咱們明白Secondary NameNode所作的是在文件系統這設置一個Checkpoint來幫助NameNode更好的工做;它不是取代NameNode,也不是NameNode的備份。內存

Secondary NameNode的檢查點進程啓動,是由兩個配置參數控制的:產品

  • fs.checkpoint.period,指定連續兩次檢查點的最大時間間隔, 默認值是1小時。
  • fs.checkpoint.size定義了edits日誌文件的最大值,一旦超過這個值會致使強制執行檢查點(即便沒到檢查點的最大時間間隔)。默認值是64MB。

關於NameNode是何時將改動寫到edit logs中的?
這個操做其實是由DataNode的寫操做觸發的,當咱們往DataNode寫文件時,DataNode會跟NameNode通訊,告訴NameNode什麼文件的第幾個block放在它那裏,NameNode這個時候會將這些元數據信息寫到edit logs文件中。

 

瞭解更多詳情請登陸超人學院網站http://www.crxy.cn?sxy或者關注超人學院微信號:CRXY-CN

或者觀看超人學院免費公開課視頻

https://ke.qq.com/course/53102#term_id=100145289

相關文章
相關標籤/搜索