1、問題的描述
由於某種原因,需要在原來已經部署了Cloudera CDH集群上重新部署,重新部署之后,啟動集群,由於Cloudera Manager 會默認設置dfs.namenode.checkpoint.period和dfs.namenode.checkpoint.txns分別是1個小時和1000000。只要達到這兩個條件之一,secondarynamenode會執行checkpoint操作,此時會出現如下的問題:
ERROR:The health test result for NAME_NODE_HA_CHECKPOINT_AGE has become bad: The filesystem checkpoint is 4 hour(s) old. This is 401.25% of the configured checkpoint period of 1 hour(s). Critical threshold: 400.00%. 2,793 transactions have occurred since the last filesystem checkpoint. This is 0.28% of the configured checkpoint transaction target of 1,000,000.
經過初步分析,是由於secondarynamenode沒有執行checkpoint的原因所導致,於是就查看了一下secondarynamenode的日志,發現真正的錯誤是:
ERROR: Exception in doCheckpoint java.io.IOException: Inconsistent checkpoint field
此時,說明查看個角色運行的日志很重要的,能夠很精確的定位錯誤所在。
那么這兩個問題的聯系是什么呢?主要是secondarynamenode沒有執行檢查點的操作,導致會產生上面的錯誤,上面的錯誤說明的是你一直沒有執行檢查點的操作。下面的錯誤說明的是執行檢查點操作失敗,不執行。
2、問題的解決前的知識儲備
在解決問題之前首先需要介紹一下檢查點的作用及重要性。
(1)檢查點
何為檢查點:檢查點是給secondarynamenode設置的,通過設置hdfs-site.xml中參數dfs.namenode.checkpoint.period和dfs.namenode.checkpoint.txns 來觸發,只要達到這兩個條件之一就可以出發secondarynamenode執行檢查點的操作。
(2)檢查點的的內容:
secondarynamenode執行檢查點的內容是首先從namenode中讀取Fsimage,並執行namenode中editslog文件中的操作,並最終生成一個新的FSimage文件,並將這個文件上傳給Namenode。注意 :在這個過程中,如果editlog沒有任何的記錄的話,達到了檢查點的條件后,也由於沒有發生任何改變,因此不執行檢查點操作。
(3)檢查點的作用:
secondarynamenode執行這個檢查點的操作,可以減少namenode的啟動時間。
3、問題的解決方法
通過真正的錯誤的描述,發現主要是版本不匹配,說明在重新安裝CDH的時候,保留了以前版本的CDH的數據,導致不一致的版本問題,所以導致secondarynamenode不執行檢查點的操作。那么解決辦法就是刪除之前的數據,所以通過刪除secondarynamenode執行檢查點是的目錄,即hdfs-site.xml中參數fs.checkpoint.dir, dfs.namenode.checkpoint.dir的值的路徑。
刪除之后,重新啟動集群即可。