HBase meta元数据损坏导致hbase master初始化失败
故障起因:
跑kylin任務,過程出錯,異常信息:Direct buffer memory,
java.io.IOException: java.lang.OutOfMemoryError: Direct buffer memoryat org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.handleException(HRegion.java:5607)at org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.<init>(HRegion.java:5579)at org.apache.hadoop.hbase.regionserver.HRegion.instantiateRegionScanner(HRegion.java:2627)at org.apache.hadoop.hbase.regionserver.HRegion.getScanner(HRegion.java:2613)at org.apache.hadoop.hbase.regionserver.HRegion.getScanner(HRegion.java:2595)at org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:2282)at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:32295)重啟HBase所有服務后,啟動正常,一分鐘后ambari顯示,所有region server正常,但是active master和standby master全部掛掉。仍然報錯:Direct buffer memory,修改hbase-env文件中的HBase off-heap MaxDirectMemorySize參數從4G調大到6G,重啟HBase后,Direct buffer memory異常消失。但某些節(jié)點的系統(tǒng)meta表一直處于RIT狀態(tài)。
癥狀描述:
1、region in transation
Ambari 顯示HBase master 正常啟動,hbase master ui :紅色警告hbase:meta region in transation,在其中一個數據節(jié)點,且一直在持續(xù),估計HBase 元數據文件損壞,已經落入永久RIT狀態(tài)
2、查看region server報錯
去處于RIT狀態(tài)的region server查看實時log,主要有三種報錯:
- access denied
- too many open files
查看hbase用戶、hdfs用戶的ulimit -a 發(fā)現open_files并不小,hbase open_files=32000應該夠用。
3、hbase shell 執(zhí)行status 報錯: HBase master failed to initization
4、執(zhí)行
重試35次后,仍然報錯:
2018-03-19 19:09:36,553 FATAL [hdmaster3:16000.activeMasterManager] master.HMaster: Unhandled exception. Starting shutdown. java.io.IOException: Failed to get result within timeout, timeout=60000msat org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:206)at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:60)at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200)at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:327)at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:302)at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:167)at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:162)at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:794)at org.apache.hadoop.hbase.MetaTableAccessor.fullScan(MetaTableAccessor.java:602)at org.apache.hadoop.hbase.MetaTableAccessor.fullScanOfMeta(MetaTableAccessor.java:143)at org.apache.hadoop.hbase.MetaMigrationConvertingToPB.isMetaTableUpdated(MetaMigrationConvertingToPB.java:163)at org.apache.hadoop.hbase.MetaMigrationConvertingToPB.updateMetaIfNecessary(MetaMigrationConvertingToPB.java:130)at org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:824)at org.apache.hadoop.hbase.master.HMaster.access$500(HMaster.java:214)at org.apache.hadoop.hbase.master.HMaster$1.run(HMaster.java:1884)at java.lang.Thread.run(Thread.java:745)調整參數:hbase.client.scanner.timeout.period,由默認60s改為600s,等待600s后master仍然會掛掉,所以考慮根本原因還是數據損壞。
解決途徑:
1、停止hbase所有服務
2、執(zhí)行命令:
hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair
離線修復meta元數據,因為hbase hbck -fixMeta只能在master正常,數據表丟失的情況下使用,master初始化失敗時,無法使用。
在此命令執(zhí)行過程中,先后出過多個異常:
1)kylin_meta表的region中有重復starttime,轉移meta數據
2)WALS文件報錯,轉移到其他位置
3)成功啟動master后,多數region上線,但仍有個別非meta表的region 處于RIT狀態(tài),強行刪除后,過一段時間,所有region上線,表數據恢復。
3、刪除hbase znode,進入zookeeper 命令端,刪除hbase znode
4、啟動hbase
5、再有問題,可以執(zhí)行:
hbase hbck -repair修復數據
總結
這次的解決過程非常痛苦,生產環(huán)境出問題三天,在查master和region server 日志過程中走了很多彎路,也沒有找對方向,最終數據恢復了,但丟了kylin的元數據表,所有的cube都重新build的,要奉勸大家的是kylin的元數據要經常備份,至此雖然服務都起來了,但沒有找到引起這個問題的真正原因,或許的kylin本身的bug,或許是多次不停的掛掉重啟,導致meta表損壞、異常。
總結
以上是生活随笔為你收集整理的HBase meta元数据损坏导致hbase master初始化失败的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue+layui获取CheckBox的
- 下一篇: 开发springboot项目,遇到的一些