Hadoop-2.X HA模式下的FSImage和EditsLog合並過程


補充了一下NameNode啟動過程中有關FSImage與EditsLog的相關知識。

一、什么是FSImage和EditsLog

  我們知道HDFS是一個分布式文件存儲系統,文件分布式存儲在多個DataNode節點上。一個文件存儲在哪些DataNode節點的哪些位置的元數據信息(metadata)由NameNode節點來處理。隨着存儲文件的增多,NameNode上存儲的信息也會越來越多。那么HDFS是如何及時更新這些metadata的呢? 
  在HDFS中主要是通過兩個組件FSImage和EditsLog來實現metadata的更新。在某次啟動HDFS時,會從FSImage文件中讀取當前HDFS文件的metadata,之后對HDFS的操作步驟都會記錄到edit log文件中。比如下面這個操作過程 
  edit log 
  那么完整的metadata信息就應該由FSImage文件和edit log文件組成。fsimage中存儲的信息就相當於整個hdfs在某一時刻的一個快照。 
  FSImage文件和EditsLog文件可以通過ID來互相關聯。在參數dfs.namenode.name.dir設置的路徑下,會保存FSImage文件和EditsLog文件,如果是QJM方式HA的話,EditsLog文件保存在參數dfs.journalnode.edits.dir設置的路徑下。 
  fsimage和editlog文件 
  在上圖中可以看到,edit log文件以edits_開頭,后面跟一個txid范圍段,並且多個edit log之間首尾相連,正在使用的edit log名字為edits_inprogress_txid。該路徑下還會保存兩個fsimage文件,文件格式為fsimage_txid。上圖中可以看出fsimage文件已經加載到了最新的一個edit log文件,僅僅只有inprogress狀態的edit log未被加載。在啟動HDFS時,只需要讀入fsimage_0000000000000008927以及edits_inprogress_0000000000000008928就可以還原出當前hdfs的最新狀況。 
  但是這里又會出現一個問題,如果edit log文件越來越多、越來越大時,當重新啟動hdfs時,由於需要加載fsimage后再把所有的edit log也加載進來,就會出現第一段中出現的問題了。怎么解決?HDFS會采用checkpoing機制定期將edit log合並到fsimage中生成新的fsimage。這個過程就是接下來要講的了。 
  

二、Checkpoint機制

  fsimage和edit log合並的過程如下圖所示: 
  fsimage與editlog合並過程 
  其實這個合並過程是一個很耗I/O與CPU的操作,並且在進行合並的過程中肯定也會有其他應用繼續訪問和修改hdfs文件。所以,這個過程一般不是在單一的NameNode節點上進行從。如果HDFS沒有做HA的話,checkpoint由SecondNameNode進程(一般SecondNameNode單獨起在另一台機器上)來進行。在HA模式下,checkpoint則由StandBy狀態的NameNode來進行。 
  什么時候進行checkpoint由兩個參數dfs.namenode.checkpoint.preiod(默認值是3600,即1小時)和dfs.namenode.checkpoint.txns(默認值是1000000)來決定。period參數表示,經過1小時就進行一次checkpoint,txns參數表示,hdfs經過100萬次操作后就要進行checkpoint了。這兩個參數任意一個得到滿足,都會觸發checkpoint過程。進行checkpoint的節點每隔dfs.namenode.checkpoint.check.period(默認值是60)秒就會去統計一次hdfs的操作次數。

三、HA模式下Checkpointing過程分析

  在HA模式下checkpoint過程由StandBy NameNode來進行,以下簡稱為SBNN,Active NameNode簡稱為ANN。 
  HA模式下的edit log文件會同時寫入多個JournalNodes節點的dfs.journalnode.edits.dir路徑下,JournalNodes的個數為大於1的奇數,類似於Zookeeper的節點數,當有不超過一半的JournalNodes出現故障時,仍然能保證集群的穩定運行。 
  SBNN會讀取FSImage文件中的內容,並且每隔一段時間就會把ANN寫入edit log中的記錄讀取出來,這樣SBNN的NameNode進程中一直保持着hdfs文件系統的最新狀況namespace。當達到checkpoint條件的某一個時,就會直接將該信息寫入一個新的FSImage文件中,然后通過HTTP傳輸給ANN。 
  ha checkpoint 
  如上圖所示,主要由4個步驟: 
1. SBNN檢查是否達到checkpoint條件:離上一次checkpoint操作是否已經有一個小時,或者HDFS已經進行了100萬次操作。 
2. SBNN檢查達到checkpoint條件后,將該namespace以fsimage.ckpt_txid格式保存到SBNN的磁盤上,並且隨之生成一個MD5文件。然后將該fsimage.ckpt_txid文件重命名為fsimage_txid。 
3. 然后SBNN通過HTTP聯系ANN。 
4. ANN通過HTTP從SBNN獲取最新的fsimage_txid文件並保存為fsimage.ckpt_txid,然后也生成一個MD5,將這個MD5與SBNN的MD5文件進行比較,確認ANN已經正確獲取到了SBNN最新的fsimage文件。然后將fsimage.ckpt_txid文件重命名為fsimage_txit。 
  通過上面一系列的操作,SBNN上最新的FSImage文件就成功同步到了ANN上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM