本文介紹NameNode或JournalNode的editlogs目錄佔用較大磁碟空間的解決方案。
問題原因
HDFS依賴FsImage Checkpoint進行editlogs合并,當FsImage Checkpoint出現異常時,會導致editlogs無法合并,通常異常情況是由於FsImage目錄寫滿或磁碟異常等情況引起的,此時NameNode重啟時間也會變得很長。NameNode FsImage Checkpoint失敗後,該FsImage目錄預設不會再次使用,需要設定開啟FsImage目錄自恢複功能。
解決方案
手動開啟FsImage目錄自復原選項。
su - hdfs hdfs dfsadmin -restoreFailedStorage true說明手動開啟FsImage目錄自復原選項,重啟後失效。
開啟成功後,NameNode後續自動FsImage Checkpoint時,會先嘗試恢複FsImage目錄。
restoreFailedStorage is set to true可選:手動NameNode Checkpoint,詳情請參見手動進行NameNode checkpoint。
手動Checkpoint後會立刻觸發editlogs合并,可以快速減少editlogs產生的磁碟佔用,但是需要NameNode進入到SafeMode,並會造成短暫的HDFS不可用。
預設開啟FsImage目錄自恢複功能。
在E-MapReduce控制台的HDFS服務頁面,選擇,添加參數為dfs.namenode.name.dir.restore,值為true的自訂配置,下次重啟NameNode後FsImage目錄自恢複功能會自動開啟。