HBase meta元数据恢复案例
【摘要】 此文档包含:构造HBase 2.x Meta元数据丢失,丢失后hbase服务故障现象,以及恢复过程。
HBase 2.x Meta元数据恢复案例
一、 构造meta表数据文件块丢失
1) meta表的数据文件选择一个文件,构造块丢失场景
2) 查找文件的块分布
3) 删除文件的所有文件块
4) 查询确认文件块已经丢失
二、 问题现象
1) 重启HBase服务,服务启动卡主,一直报检查HMaster失败;
三、 问题定位过程
1) 查看HMaster健康检查日志如下,报meta不在线
2) 查看hbase原生界面,确认系统表都没有上线
3) 查看HMaster的日志
4) 执行hbck检查
由于HMaster没有启动好,不能检查;
5) 执行fsck检查
如下发现meta的一个文件有丢失数据块
四、 解决过程
1. 停止HBase服务
2. 删除损坏文件
3. 启动hbase服务
服务启动失败,但后台进程已启动;查看Hbase原生界面发现系统表都没有上线;hbase shell进去查看meta如下,meta表中的数据不正常;
如下日志显示HMaster跳过了上线时跳过了下面表,最终HMaster初始化失败。
4. 停止HBase服务,添加配置:hbase.assignment.skip.empty.regions=false ,在启动服务;
5. 服务启动成功,hbase恢复
所有系统表和用户表已经上线,数据可查询;
五、 问题总结
1. Meta表中存储的源数据信息,可以通过读取各表的tablesec和regioninfo信息重建,如果文件丢失可以用下面命令修复
hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair -fix
注:此命令执行时需要停止hbase服务;
2. 上面命令恢复的Meta元数据缺少部分行信息,说明表的region没有上线;当前案例中系统表的元数据也有问题,HMaster initialized失败,即使执行assign和unassign也不能上线;
Meta表的信息说明:
info:regioninfo:该列对应的 Value 主要存储4个信息,即EncodedName、RegionName、Region的StartRow、Region的EndRow。
info:seqnumDuringOpen:该列对应的 Value 主要存储Region打开时的sequenceId。
info:server:该列对应的 Value 主要存储Region落在哪个RegionServer上。
info:serverstartcode:该列对应的 Value 主要存储所在RegionServer的启动Timestamp。
info:sn:该列对应的 value 由 server 和 serverstartcode 组成。
info:state:该列对应的 value 表示 Region 状态。
3. 添加如下配置,这样HMaster启动的时候就会尝试上线空region。
hbase.assignment.skip.empty.regions=false
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
adadad2021/04/13 12:15:381楼编辑删除举报
停止MRS 集群的HBASE,把自建集群的数据迁移到MRS的hbase集群,执行下面命令恢复元数据,启动hbase后,发现表还是无法查询:
hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair -fix
【解决方法】
停止MRS 集群的HBASE,hbase的自定义配置中添加hbase.assignment.skip.empty.regions=false,启动Hbase。