背景:一次对测试环境hbase的远程调试中,一边压测一边调试,最后导致regionserver挂了,出现了几千个处于中间状态的region(RIT),然后master也挂了起不来。按之前的经验,如果大部分region都RIT了,master又挂了,修复起来会比较麻烦。这个集群就我一个人用,目前我只需要一个表正常就行了。于是打算直接重做测试环境hbase集群

注意:该方法适用于2.0.2版本的hbase,其他版本hbase操作可能有些不同

行动步骤:

1. 关闭集群

2.将zookeeper根目录下/hbase这个文件夹直接删除

解释:集群重启的时候会自动重建的,zookeeper根目录下/hbase存的都是些主从复制peer信息和元数据表所在服务器啥的,删掉后重启集群会自动重建

3. 删除对应hadoop里的wal文件夹,默认路径为/hbase/WALs

解释:这一步会导致丢失wal数据,里面存了些最新的hbase数据修改,删掉会丢失最近的修改,不过测试环境无所谓。不删除的话后面集群重启时会master节点会因为切分wal失败而无法启动。

4.删除hadoop里的/hbase/data/hbase/meta

解释:元数据表的存储路径,RIT的关键所在,删掉重启集群后会自动重建集群必要部分,其他数据表需要使用修复工具修复

5.删除hadoop里的/hbase/data/hbase/namespace

6.重启集群,这个时候master节点就能正常启动了

解释:重启后你会发现很多表对应的region数量为0,这是因为元数据表里没有这些表的region数据,需要修复下元数据表

hbase无法启动不了 hbase master启动不了_database

 

7.使用修复工具修复需要使用的表

解释:修复工具请看这个github

8.重启master节点

解释:重新加载元数据表

9.完成