HBase2.x之RIT問題解決方案

1 問題描述

Region-In-Trasition機制

從字面意思來看,Region-In-Transition說的是Region變遷機制,實際上是指在一次特定操作行為中Region狀態的變遷,例如merge、split、assign、unssign等操作。RIT問題指的是在RIT過程中出現了異常情況,然後導致region的狀態一直保持在RIT,使得HBase出現異常。

2 解決方案

2.1 方案一

檢查hdfs的健康度,是否有hbase的文件丟失或損壞,運行命令hadoopfsck /,結果如下:

HBase2.x之RIT問題解決方案

排除hdfs丟失block的問題。如果出現hdfs的block損壞或丟失的情況,可以通過hdfs的修復命令進行修復。

2.2方案二

在HBase1.x系列中RIT問題通常可以通過hbasehbck–repair操作完成修復。但是在HBase2.x系列中,該命令還沒有支持,所以暫時無法通過這種命令完成修復。結果如下:

HBase2.x之RIT問題解決方案

第一次執行發現沒有權限,root用戶不是hdfs的超級用戶,安裝提示需要以hbase用戶去執行該命令。修改如下:

suhbase -s /bin/sh -c “hbasehbck -repair”

HBase2.x之RIT問題解決方案

提示為hbase有其他線程正在執行hbck fix命令,但是其實沒有這種命令,其實從這裡就可以看出HBase2.x對於-repair的支持是不夠的。我按照提示刪除了hdfs(/hbase/.tmp/)上的hbase-hbck.lock文件,重新運行命令如下:

HBase2.x之RIT問題解決方案

2.3方案三

根據RIT狀態執行assign或者unassign命令,狀態信息如下:

HBase2.x之RIT問題解決方案

經過查詢資料,解決方案如下:

HBase2.x之RIT問題解決方案

hbase shell多次執行 unassign '20acfcbd68fd624a78bb34c88f9382d1'和unassign '20acfcbd68fd624a78bb34c88f9382d1' , true都超時結束,通過修改rpc和zk的超時時間都無法完成(正常超時時間為60000ms,我修改為600000ms)。

2.4 方案四

經過多次試驗,最終都無法使得HBase回覆正常,最終決定刪除進行測試。

Zookeeper節點刪除:

通過hbasezkcli命令進入Zookeeper命令行界面:

HBase2.x之RIT問題解決方案

我想刪除節點 /hbase-unsecure/region-in-transition,但是發現並沒有該節點,經過資料查詢瞭解到HBase2.x的RIT狀態並不像HBase1.x系列存儲在Zookeeper上。經過測試刪除/hbase節點重啟hbase並不能解決RIT問題。

HBase表刪除:

hbase shell>disable M_TDY_PT_LCZZ

disable失敗,所以正常刪除表操作無法執行。需要進行暴力刪除,暴力刪除指的是從元數據進行刪除。

先停掉HBase

刪除hdfs表目錄(記得先備份,等下回複用)

hdfsdfs -cp /hbase/data/hospital/P_TDY_DASC_DE02_01_039_63 /

hdfsdfs -cp /hbase/data/hospital/M_TDY_PT_LCZZ /

hdfsdfs -rm -r -skipTrash /hbase/data/hospital/P_TDY_DASC_DE02_01_039_63

hdfsdfs -rm -r -skipTrash /hbase/data/hospital/ M_TDY_PT_LCZZ

delete 'hbase:meta','rowkey','column',rowkey信息可以去hbase的ui去看到:

HBase2.x之RIT問題解決方案

HBase2.x之RIT問題解決方案

然後重啟HBase,但是發現問題沒有解決。

hbase shell查詢數據看到hbase的meta刪除失敗了,原本的meta信息還在:

HBase2.x之RIT問題解決方案

然後重新刪除(delete命令換成deleteall命令):

HBase2.x之RIT問題解決方案

HBase2.x之RIT問題解決方案

再刪除Zookeeper中的/hbase節點,重啟HBase發現RIT問題已經解決了。

後續就是重建表,然後恢復數據了。

PS:想了解更多,關注訂閱號領取更多資源

HBase2.x之RIT問題解決方案


分享到:


相關文章: