1. 程式人生 > >HDFS中的checkpoint( 檢查點 )的問題

HDFS中的checkpoint( 檢查點 )的問題

1、問題的描述

由於某種原因,需要在原來已經部署了Cloudera CDH叢集上重新部署,重新部署之後,啟動叢集,由於Cloudera Manager 會預設設定dfs.namenode.checkpoint.perioddfs.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的值的路徑。

  刪除之後,重新啟動叢集即可。