背景:一次对测试环境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数据,需要修复下元数据表
7.使用修复工具修复需要使用的表
解释:修复工具请看这个github
8.重启master节点
解释:重新加载元数据表
9.完成