一、dits和fsimage
首先要提到兩個文件edits和fsimage,下面來說說他們是做什麼的。
那麼問題來了,只有在名稱節點(NameNode)啟動的時候才會合並fsimage和edits,那麼久而久之edits文件會越來越大,特別是大型繁忙的HDFS集群。這種情況下,由於某種原因你要重啟名稱節點(NameNode),那麼會花費很長的時間去合並fsimge和edits,然後HDFS才能運行。
二、Secondary NameNode
目前使用的版本Hadoop-0.20.2可以使用Secondary NameNode來解決上面的問題。Secondary NameNode定期合並fsimage和edits日志,把edits日志文件大小控制在一個限度下。因為內存需求和NameNode差不多(On the same order),所以Sencondary NameNode通常要運行在另外個機器上。
secondary NameNode配置在conf/masters文件,啟動命令:bin/start-dfs.sh(如果你使用不建議的start-all.sh也是會啟動的)。
三、什麼時候checkpiont
secondary NameNode 什麼時候執行checkpoint來合並fsimage和eidts。呢?有兩個配置參數控制:
secondary NameNode 保存最後一次checkpoint的結果,存儲結構和主節點(NameNode)的一樣,所以主節點(NameNode)可以隨時來讀取。
如果你沒有啟動secondary NameNode 那麼可以試試 bin/hadoop secondarynamenode -checkpoint 甚至 bin/hadoop secondarynamenode -checkpoint force. 看看生成的文件。
checkpoint可以解決重啟NameNode時間過長的弊端。另外還有偏方:
四、Import Checkpoint(恢復數據)
如果主節點掛掉了,硬盤數據需要時間恢復或者不能恢復了,現在又想立刻恢復HDFS,這個時候就可以import checkpoint。步驟如下:
這樣NameNode會讀取checkpoint文件,保存到dfs.name.dir。但是如果你的dfs.name.dir包含合法的fsimage,是會執行失敗的。因為NameNode會檢查fs.checkpoint.dir目錄下鏡像的一致性,但是不會去改動它。
值得推薦的是,你要注意備份你的dfs.name.dir和 ${hadoop.tmp.dir}/dfs/namesecondary。
五、Checkpoint Node 和 Backup Node
在後續版本中hadoop-0.21.0,還提供了另外的方法來做checkpoint:Checkpoint Node 和 Backup Node。則兩種方式要比secondary NameNode好很多。所以 The Secondary NameNode has been deprecated. Instead, consider using the Checkpoint Node or Backup Node.
Checkpoint Node像是secondary NameNode的改進替代版,Backup Node提供更大的便利,這裡就不再介紹了。