故障现象:

常见于节点异常下线后,重启节点regionserver的ServerName与注册信息中的name不一致(时间戳不同),导致分区无法找到。此时重启的节点被认为新节点

修复步骤:
以下步骤仅在紧急情况下使用,且操作过程中需谨慎仔细(涉及到服务下线与数据移动),需保障数据安全。
1. 关闭hbase集群
bin/stop-hbase.sh
2. 检查各节点服务是否已正常关闭,以及backup master服务是否关闭
3. 清空zookeeper中hbase的注册信息
rmr /dmhbase
4. 将hdfs中hbase数据备份
hadoop fs -mv /hbase /hbase_20240624
5. 新建一个空的hbase目录
hadoop fs -mkdir /hbase
6. 启动hbase集群,以初始化一个空hbase集群。此时系统表meta, namespace应自动创建成功,否则可能为步骤3未执行
bin/start-hbase.sh
7. 关闭hbase集群
bin/stop-hbase.sh
8. 将备份的数据中要恢复的namespace移回对应目录,
hadoop fs -mv /hbase_20240624/data/erec /hbase/data/erec
9. 启动hbase集群,观察erec空间是否自动注册完成,此时通常情况下regions并未自动注册
bin/start-hbase.sh
10. 将hbck2 jar 拷贝到hbase 的lib目录,并重启集群

11. 运用hbck工具修复meta中的命名空间注册信息,运行后会打印提示需要assign的分区信息
hbase org.apache.hbase.HBCK2 addFsRegionsMissingInMeta erec

12. 重启hbase集群
bin/stop-hbase.sh
bin/start-hbase.sh
13. Assign 所有分区
hbase org.apache.hbase.HBCK2 assigns 08f5ff612e9007c97ff5d1599fd8967d 15096dce733e6575b3d0d38dce202a64。。。
执行成功后的如下

此时hbase webui页面上会出现各分区开始分配信息,并自动执行至所有分区恢复。

评论区