由MasterProcWals狀態日志過多導致的HBase Master重啟失敗問題


1 文檔編寫目的

本文主要講述如何解決由MasterProcWals狀態日志過多導致的HBase Master重啟失敗問題。

測試環境:

操作系統版本為Redhat7.2

CM和CDH版本為5.13.1

文章目錄結構:

1. 文檔編寫目的

2. 問題描述

3. 解決方案

3.1 問題解決

3.2 相關建議

4. 總結

2 問題描述

由於某些已知存在的問題,會導致MasterProcWals狀態日志過多,如果重啟HBase Master,可能會導致HBase Master啟動失敗。因為HBase Master進入活動狀態需要讀取並實例化所有正在運行的程序當前記錄在/hbase/MasterProcWALs/目錄下對應的文件。如果此文件夾太大,HBase Master將在完全變為活動狀態之前超時並崩潰。

問題特征:

1、HBase Master 重啟失敗前,會打印出類似的日志:

2018-07-07 17:43:08,619 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recover lease on dfs filehdfs://nameservice1/hbase/MasterProcWALs/state-00000000000000084815.log2018-07-07 17:43:08,619 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recovered lease, attempt=0 onfile=hdfs://nameservice1/hbase/MasterProcWALs/state-00000000000000084815.logafter 0ms2018-07-07 17:43:08,624 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recover lease on dfs filehdfs://nameservice1/hbase/MasterProcWALs/state-00000000000000084816.log2018-07-07 17:43:08,625 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recovered lease, attempt=0 onfile=hdfs://nameservice1/hbase/MasterProcWALs/state-00000000000000084816.logafter 1ms2018-07-07 17:43:08,630 INFO org.apache.hadoop.hbase.util.FSHDFSUtils:Recover lease on dfs filehdfs://nameservice1/hbase/MasterProcWALs/state-00000000000000084859.log2018-07-07 17:43:08,630 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recovered lease, attempt=0 onfile=hdfs://nameservice1/hbase/MasterProcWALs/state-00000000000000084859.logafter 0ms2018-07-07 17:43:08,678 FATALorg.apache.hadoop.hbase.master.HMaster: Failed to become active masterjava.lang.NullPointerException

2、查看HBase Master日志,還能看到如下信息:

2018-07-07 17:43:38,978 WARN org.apache.hadoop.hdfs.BlockReaderFactory:I/O error constructing remote block reader. java.net.SocketException: Too manyopen files

3、通常你能夠在/hbase/MasterProcWALs目錄下看到大量的日志文件,並且這些日志文件占用HDFS存儲空間總和可能已經達到TB級別了。可以通過如下命令查看/hbase/MasterProcWALs目錄占用HDFS存儲空間大小:

hdfs dfs -du -s -h /hbase/MasterProcWALs

注:執行該命令后,我的/hbase/MasterProcWALs目錄大小將近10 TB(不含副本)

3 解決方案

3.1 問題解決

該問題主要和HBase某個分支的實現方式有關,據說已經重新設計了該實現方式,新的實現方式能夠避免該問題,將在CDH 6中應用。

如果出現由MasterProcWals狀態日志過多導致的HBase Master重啟失敗問題建議先將/hbase/MasterProcWALs目錄下的所有文件備份,然后刪除/hbase/MasterProcWALs目錄下的所有文件,重啟HBase Master即可解決問題。

3.2 相關建議

建議啟用HBase Master 日志清除器插件,定時清理日志。

目前默認配置的清除器插件有ReplicationLogCleaner、SnapshotLogCleaner和TimeToLiveLogCleaner這三種:

  • ReplicationLogCleaner:如果有跨集群數據同步的需求,通過該Cleaner來保證那些在同步中的日志不被刪除;
  • SnapshotLogCleaner:被表的snapshot使用到了的wal不被刪除;
  • TimeToLiveLogCleaner:日志文件最后修改時間在配置參數{hbase.master.logcleaner.ttl默認600秒}之前的可以刪除。

4 總結

1、如果MasterProcWals狀態日志過多,那么重啟HBase Master,可能會導致HBase Master啟動失敗。目前臨時的解決方案是備份/hbase/MasterProcWALs目錄下的所有文件后,刪除該目錄下所有文件並重啟HBase Master。

2、建議定時清理MasterProcWals狀態日志,可以通過HBase自帶的清理器插件處理,也可以自己開發日志清理插件,按要求添加到HBase的classpath 中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM