某天由于集群资源不足。hbase大面积 region server 负载爆炸卡死,隔天发现部分查询报错
集群中一张表某些查询找不到region
尝试了重启集群和滚动重启集群,考虑滚动重启的过程会把regionserver上的region迁出和迁入。试试能不能修复,果断的修复失败。因为迁出和迁入并不会改变region本身。只是迁出迁入而已
尝试 hbase hbck -details 'hbsxx_bsdb:taj_xxx_ktgg'看一下状态
发现
hbck报错 inconsistencies detected
看了一下web ui的HBCK report
有2个hole 和12个overlaps
估计是元数据出问题了
尝试修复
首先需要安装hbck工具 自带那个只能看不能操作 ,hbase2已经废弃了hbck这个组件,HBCK2已经被剥离出HBase成为了一个单独的项目,如果你想要使用这个工具,需要根据自己HBase的版本,编译源码。
其GitHub地址为:https://github.com/apache/hbase-operator-tools.git
在pom中将hbase版本换成自己实际的hbase2.x版本,项目根目录下运行打包命令:
mvn clean install -DskipTests
打包完成后,是有多个jar包的,将自己需要的hbck2取出来hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.0.0-SNAPSHOT.jar。
cdh的话需要从官网下载 https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/admin_hbase_hbck.html
执行
hbase hbck -j /path/hbck2.jar addFsRegionsMissingInMeta hbxxxsdb:taj_n04xxxktgg
果断没卵用
然后又执行
hbase hbck -j /hbase-hbck2-<version>.jar extraRegionsInMeta --fix hbxxxsdb:taj_n04xxxktgg
返回给我一个 No mismatching regions this table is good 也无效
尝试用别的命令
hbase hbck -j hbase-hbck2-<version>.jar filesystem --fix hbxxxsdb:taj_n04xxxktgg
看到没有一秒结束,感觉可能有用,结果挂了一个多小时也没反应。失败
hbase hbck -j hbase-hbck2-<version>.jar extraRegionsInMeta --fix hbxxxsdb:taj_n04xxxktgg
仍然提示我 No mismatching regions this table is good 无效
回过头再去hbase 的ui上查
和之前HBCK report上的对了一下 发现报问题那个region为空 ,决定把这个region 跟别的region合并掉。web 上hole 少了一个 ,但是命令行的hbck 没有变化 还是提示我有一个矛盾region
通过online_merge热合并Region
hbase shell
merge_region '39erijidsfd8s098fen32j3i8d9','48jfidnxoskd023843257822j3i'
Region的hash值就是Region名称的最后那段在两个.之间的字符串部分
但是因为没有hole了 决定再次get测试一下,果断的返回了一个正常找不到rowkey的空返回。不再报错了 。随后让开发测试。开发反馈可以正常查询了