hbase2.x錯誤記錄之 disable表卡住


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)

常見的Control Characters

1.3 解決:

方式1:修改表元數據
通過修改hbase meta表里面對應表的狀態,這種方式目前試了一下,貌似對我這邊沒什么用。具體的思路如下:

  1. 修改hbase:meta 把表對應的狀態置為開啟或者關閉狀態
hbase> put "hbase:meta","table_name","table_state",value="\b\0"
  1. 查看是否被修改
hbase> get "hbase:meta","table_name","table_state"
  1. 查看表狀態
hbase> is_disabled table_name
false
hbase> is_enabled table_name
true
  1. 嘗試drop table
    不能正常刪除,還是顯示表的狀態為disableing

借鑒:
| https://community.cloudera.com/t5/Support-Questions/Hbase-table-is-stuck-in-quot-Disabling-quot-state-Neither/m-p/235112

方式2:通過hbase2.x 修復工具

  1. 設置表狀態
# 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"
  1. 如果表region狀態跟你預想的不一樣,可以通過HBCK2 設置region的狀態

HBCK2使用

4) 刪除表


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM