1.1 現象
通過hbase shell disable表,顯示表以及關閉,但是使用drop table_name,卻顯示表狀態為disableing,不能正常被刪除。
1.2 分析
1)通過以下命令查看表狀態:
hbase> is_disabled table_name
false
hbase> is_enabled table_name
false
通過查看表的狀態發現,當前表既沒有開啟也沒有關閉。
2)查看當前表對應的元數據
hbase> get "hbase:meta","table_name","table:state"
可以發現value為\x08\x02,正常的值是\x08\x00(Enabled)或者\x08\x01(Disabled)
1.3 解決:
方式1:修改表元數據
通過修改hbase meta表里面對應表的狀態,這種方式目前試了一下,貌似對我這邊沒什么用。具體的思路如下:
- 修改hbase:meta 把表對應的狀態置為開啟或者關閉狀態
hbase> put "hbase:meta","table_name","table_state",value="\b\0"
- 查看是否被修改
hbase> get "hbase:meta","table_name","table_state"
- 查看表狀態
hbase> is_disabled table_name
false
hbase> is_enabled table_name
true
- 嘗試drop table
不能正常刪除,還是顯示表的狀態為disableing
方式2:通過hbase2.x 修復工具
- 設置表狀態
# hbase hbck -j xxx.jar table_name state
表狀態分為:enable,disable。enabling,disabling
不過在開始操作之前,最好看一下該表所有region對應的狀態,否則,就算設置為DISABLE狀態,在刪除的時候依然不能正常刪除。
2)查看當前表所有的region狀態
# hbase shell <<< "scan 'hbase:meta', {FILTER=>\"PrefixFilter('table_name')\"}" |grep "info:state"
- 如果表region狀態跟你預想的不一樣,可以通過HBCK2 設置region的狀態
4) 刪除表