hbsae表进行数据清洗,在清空数据的时候发生错误,引发后续问题
HBase version: 1.2.0-cdh5.11.1
- HBase 清空数据
- truncate ‘TableName’(清除数据,并且清除了分区)
- truncate_preserve ‘TableName’(清除数据,不清除分区)
由于我想保留分区,所以选择了 truncate_preserve
问题发生:
用hbase shell 执行truncate_preserve ‘TableName’,中途网络问题ssh突然断开连接
- shell显示:
1 | Truncating 'TableName' table (it may take a while): |
后重新连接ssh hbase shell,list 发现表名存在,但是scan、disable、drop命令都报Table not found
1 | ERROR: Table TableName does not exist. |
HBase Web UI 上也存在这张表,但是点进去有报错信息:
1 | org.apache.hadoop.hbase.client.HBaseAdmin.checkTableExistence(HBaseAdmin.java:1499) |
问题推断
第一反应是这张表到底存不存在?
到HDFS上查看文件:
1 | hadoop fs -ls /hbase/data/default/TableName |
发现文件目录存在,但是里面没有任何文件,是空目录。推断可能是文件已经删掉了,但是缓存中或者zk中还是有这张表的信息,因为突然中止导致table meta没有生成
尝试恢复
- snapshot 恢复(失败)
因为这张表之前做过snapshot备份,想从snapshot恢复
1 | clone_snapshot 'TableName_Bak', 'TableName' |
发现一只会卡在restore_snapshot 'TableName_Bak'
,应该是找不到这张表的meta
hbck修复(失败)
想着通过meta修复,可以自动生成desc文件
1 | #修复 meta |
执行这两条语句后发现日志中均没有该表名,也没有任何异常,问题依旧
- zookeeper删除信息(成功)
登录hbase zk:
1 | zkCli.sh |
重启hbase 集群后这张表已经不存在,重新建表后正常
转载请注明出处