HBase meta元数据恢复案例
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
- 点赞
- 收藏
- 关注作者
评论(0)