上一文章已經把HBCK2 怎么在小於hbase2.0.3版本的編譯與用法介紹了,解決主要場景
查看hbase存在的問題
一、使用hbase hbck命令
hbase hbck命令是對hbase的元數據進行檢查,看是否有不健康的region
問題1:Unable to read .tableinfo
使用 參數 generateMissingTableDescriptorFile
hbase org.apache.hbase.HBCK2 generateMissingTableDescriptorFile hbase:meta
問題2:region is not onlie 導致該表無法查詢
hbase后台報錯: xxx region is not onlie
hbase hbck檢測錯誤:
ERROR: Region { meta => kylin_metadata,,1626761168323.1d8cb3ce4a074d6a706c9fee570129df., hdfs => hdfs://master:8020/apps/hbase/data/data/default/kylin_metadata/1d8cb3ce4a074d6a706c9fee570129df, deployed => , replicaId => 0 } not deployed on any region server.
解決方式:
- 看到Regionname是:1d8cb3ce4a074d6a706c9fee570129df
- 執行命令重新分配 Region
- hbase org.apache.hbase.HBCK2 -d -s assigns 1d8cb3ce4a074d6a706c9fee570129df
- 如果有多個Region,直接寫代碼使用正則表達式[a-zA-Z0-9]{32}獲取所有錯誤信息里面的RegionName
hbase org.apache.hbase.HBCK2 -d -s assigns RegionName1 RegionName2 RegionName3
問題3:hbase:namespace的regionoffline 導致master is initializing
解決方式:
- 查詢 hbase:meta表 hbase:namespace的region scan 'hbase:meta'
2.找到regionname
3. hbase org.apache.hbase.HBCK2 -d -s assigns regionname
4.desc 任意一個表,看是否能查詢
問題3 region is closing ,region被lock
- 先去hbase ui的
左邊就是pid,看到wating狀態的pid 需要執行bypass
2.執行
hbase org.apache.hbase.HBCK2 -d -s bypass -o -r 22887 22889 22888
對會返回true的標志的pid 所對應的 regionname 執行下面命令
3.hbase org.apache.hbase.HBCK2 -d -s unassigns regionname1,regionname2