今天在使用 HBase 创建数据表的时候,提示数据表已存在,但使用list命令又看不到该表,也无法 drop 掉。过程如下

1
2
3
4
5
6
7
hbase(main):018:0>create 'pois','data
Error: Table already exists: pois!
hbase(main):019:0>list
TABLE
0 row(s) in 8.0245 seconds

=> []

可以看出,HBase 错误地判断了,经过一番 Google,找到了几个推荐的解决方案:

## 方案1:hbase cannot find an existing table

1) Delete all entries in the .META table for this table manually, and

2) Delete the directory corresponding to this table from HDFS

方案2:Killing the HBase zombie table

1) use ** hbase hbck ** to see health-checkk

2) look at .META table

3) clear zookeeper’s cache


方案3:最简单

这两种方案对初学者来说都有一定的难度,并且容易误操作儿影响到其他的数据表,找一个简单的方法就很有必要了,那么找一找 HBase 自带的命令吧,经过试验,发现有一个命令`hbase-clean’,尝试运行,如下,

1
2
3
hbase-cleanup.sh 

Usage: hbase-cleanup.sh (--cleanZk|--cleanHdfs|--cleanAll|--cleanAcls)

从提示可以看出有三种模式,区别如下

1
2
3
--cleanZk   cleans hbase related data from zookeeper.
--cleanHdfs cleans hbase related data from hdfs.
--cleanAll cleans hbase related data from both zookeeper and hdfs.

想必接下来就知道如何处理了吧!这种方式要简单的多,适合初学用户!


参考

1.Using HBase Command-Line Utilities

2.Killing the HBase zombie table

3.hbase cannot find an existing table