HBCK - HBCK檢查什麼?
(1)HBase Region一致性
-
集羣中所有region都被assign,而且deploy到唯一一臺RegionServer上
-
該region的狀態在內存中、hbase:meta表中以及zookeeper這三個地方需要保持一致
(2)HBase 表完整性
-
對於集羣中任意一張表,每個rowkey都僅能存在於一個region區間
HBCK – 常用檢查命令
-
./bin/hbase hbck
-
./bin/hbase hbck –details
-
./bin/hbase hbck TableFoo TableBar
HBCK - 局部低危修復
-
-fixAssignments :修復沒有assign、assign不正確或者同時assign到多臺RegionServer的問題region。
-
-fixMeta :主要修復.regioninfo文件和hbase:meta元數據表的不一致。修復的原則是以HDFS文件爲準:如果region在HDFS上存在,但在hbase.meta表中不存在,就會在hbase:meta表中添加一條記錄。反之如果在HDFS上不存在,而在hbase:meta表中存在,就會將hbase:meta表中對應的記錄刪除。
HBCK –高危修復
-
region區間overlap相關問題的修復屬於高危修復操作,因爲這類修復通常需要修改HDFS上的文件,有時甚至需要人工介入。
-
對於這類高危修復操作,建議先執行hbck -details詳細瞭解更多的問題細節,再執行相應的修復命令
-
-repair|-fix 命令強烈不建議生產線使用
HBCK –案例
RIT處理套路
-
套路一:pending_open(或pending_close)狀態的region通常可以使用hbck命令修復
-
套路二:failed_open (或failed_close)狀態的region通常無法使用hbck命令修復
-
套路三:failed_open (或failed_close)狀態的region需檢查日誌確認region無法打開關閉的具體原因
-
套路四:region處於RIT狀態但hbck顯示正常,把zk上的region-in-transaction節點相關region刪除,重啓master
HBase-日誌分析
-
監控分析只能告訴你可能是什麼原因,間接原因
-
日誌分析才能告訴你問題的精確原因,最直接原因。
一般的問題都能在日誌中找到直接原因,再根據原因找答案。
-
通過日誌分析可以弄清楚事情的來龍去脈,監控不會告訴你那麼多
【小結】
HBCK檢查什麼?
1、HBase Region一致性
a.集羣所有region都被assign,且被deploy到唯一一臺regionserver上
b.該region的狀態在內存、hbase:meta表及zk上是否一致
2、HBase表完整性
對集羣中任意一張表,每個rowkey都僅能存在於一個region區間
region不一致情況主要分爲以下幾種類型:
1、There is a hole in the region chain between X and Y.
這種情況是在hdfs層面上的,這個region的.regioninfo(meta)文件不存在,使用"-fixHdfsHole"進行修復;
-fixHdfsHole:修復region holes(空洞,某個區間沒有region)問題
2、Found lingering reference file X.
這種情況基本上都是由於split reion時造成的,這些文件都是連接文件,使用"-fixReferenceFiles"進行修復;
3、Region X on HDFS,but not listed in hbase:meta or deployed on any region server.
這種情況下region的實際數據是存在的,但是在hbase:meta中不存在,使用"-fixMeta"進行信息同步修復;
-fixMeta:主要修復.regioninfo文件和hbase:meta元數據表的不一致。修復的原則是以HDFS文件爲準:如果region在HDFS上存在,但在hbase.meta表中不存在,就會在hbase:meta表中添加一條記錄。反之如果在HDFS上不存在,而在hbase:meta表中存在,就會將hbase:meta表中對應的記錄刪除
4、Region X not deployed on any region server.
這種情況下,region的hfile等數據都在,只是沒有在任何region上online,使用"fixAssignments"進行修復。
-fixAssignments:修復沒有assign、assign不正確或者同時assign到多臺RegionServer的問題region。
5、使用"- repairHoles"進行修復。相當於-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans
由於不一致的現象多種多樣,原因也不盡相同,通過來說,regionserver crash、region在regionserver中遷移燈是基本原因。
步驟1. hbase hbck 檢查輸出所以ERROR信息,每個ERROR都會說明錯誤信息。
步驟2. hbase hbck -fixTableOrphones 先修復tableinfo缺失問題,根據內存cache或者hdfs table 目錄結構,重新生成tableinfo文件。
步驟3. hbase hbck -fixHdfsOrphones 修復regioninfo缺失問題,根據region目錄下的hfile重新生成regioninfo文件
步驟4. hbase hbck -fixHdfsOverlaps 修復region重疊問題,merge重疊的region爲一個region目錄,並從新生成一個regioninfo
步驟5. hbase hbck -fixHdfsHoles 修復region缺失,利用缺失的rowkey範圍邊界,生成新的region目錄以及regioninfo填補這個空洞。
步驟6. hbase hbck -fixMeta 修復meta表信息,利用regioninfo信息,重新生成對應meta row填寫到meta表中,併爲其填寫默認的分配regionserver
步驟7. hbase hbck -fixAssignment 把這些offline的region觸發上線,當region開始重新open 上線的時候,會被重新分配到真實的RegionServer上 , 並更新meta表上對應的行信息。