NameNode将對檔案系統的改動追加儲存到本地檔案系統上的一個日志檔案edits。當一個NameNode啟動時,它首先從一個映像檔案(fsimage)中讀取HDFS的狀态,接着執行日志檔案中的編輯操作。然後将新的HDFS狀态寫人fsimage中,井使用個空的edits檔案開始正常操作。因為NameNode隻有在啟動階段才合并fsimage和edits,久而久之日志檔案可能會變得非常龐大,特别是對于大型的叢集。日志檔案太大的另一個副作用是下一次NameNode啟動會很長世間,NameNode和Secondary NameNode之間的通信示意圖如圖所示。

如上圖所示。NameNode和Secondary NameNode間資料的通信使用的是HTTP協定, Secondary NameNode定期合并fsimage和edits日志,将edits日志檔案大小控制在一個限度下。因為記憶體需求和NameNode在一個數量級上、是以通常Secondary NameNode和NameNode運作在不同的機器上。Secondary NameNode通過bin/start-dfs.sh在conf/masters中指定的節點上啟動。
Secondary NameNode的檢查點程序啟動,是由以下兩個配置參數控制的:
(1)fs.checkpoint.period指定連續兩次檢查點的最大時間間隔,預設值是1小時。
(2)fs.checkpoint.size定義了日志檔案的最大值,一旦超過這個值會導緻強制執行檢查點(即使沒到檢查點的最大時問間隔),預設值是64MB。
Secondary NameNode儲存最新檢查點的目錄與NameNode的目錄結構相同。是以NameNode 可以在需要的時候讀取Secondary NameNode上的檢查點鏡像。
如果NameNode上除了最新的檢查點以外,所有的其他曆史鏡像和edits檔案都丢失了,NameNode可以引入這個最新的檢查點。以下操作可以實作這個功能:
1) 在配置參數dfs.name.dir指定的位置建立一個空檔案夾。
2) 把檢查點日錄的位置指派給配置參數fs.checkpoint.dir。
3) 啟動NameNode,加上-importCheckpoint。
NameNode會從fs.checkpoint.dir目錄讀取檢查點,并把它儲存在dfs.name.dir日錄下。如果dfs.name.dir目錄下有合法的鏡像檔案,NameNode會啟動失敗。NameNode會檢查fs.checkpoint.dir 目錄下鏡像檔案的一緻性,但是不會去改動它。
本文轉自大資料躺過的坑部落格園部落格,原文連結:http://www.cnblogs.com/zlslch/p/5081598.html,如需轉載請自行聯系原作者