最近公司的服务器硬件出现了问题 ,期间暂停大数据平台作业服务,硬件维护完成后,重启了大数据平台服务。
Hbase完成启动,无法正常服务,版本1.2.0。查看Hbase管理后台,RegionServer的为0,Tables列表为空。查看HMaster的启动日志,报错如下:
client.RpcRetryingCaller (RpcRetryingCaller.java:callWithRetries(118)) - Call exception, tries=11, retries=31, retryTime=99796ms, msg=row ‘scores,’ on table ‘hbase:meta’ at region=hbase:meta,1.xxxxx, hostname=xxxxx,60020,1586948990258, seqNum=0
client.RpcRetryingCaller (RpcRetryingCaller.java:callWithRetries(118)) - Call exception, tries=11, retries=31, retryTime=99796ms, msg=row ‘scores,’ on table ‘hbase:meta’ at region=hbase:meta,1.1588230740, hostname=xxxx,60020,1586948990258, seqNum=0
排查了host的配置,正常。进入HDFS 文件系统查看HBase的目录,原先的表数据都还在。
执行 hbase hbck -fixMeta -fixAssignments 和 hbase hbck -repair 重启都无效果。
执行hdfs fsck检查Meta目录,发现meta表文件损坏,经过多次报错,反复处理,完成启动,步骤如下:
1、重新命名meta目录为meta_bak, 创建新目录meta, 启动HBase。
2、“ERROR: There is a hole in the region chain between and . You need to create a new .regioninfo and region dir in hdfs to plug the hole” ,hdfs上面没有.regioninfo的region 执行 hbase hbck -fixHdfsOrphans
3、****“****ERROR:Multiple region have the same startkey“: 多个region 的startkeytg **执行 **hbase hbck -fixHdfsOverlaps
4、对新建的meta目录,元数据逆向修复,执行hbase hbck -fixMeta -fixAssignments
5、最后检查Hbase的状态OK即可, 执行 hbase hbck。
附上网上一个比较完整的修复流程:
在线修复
前提条件:HDFS fsck 确保HBase根目录下文件没有损坏丢失,如果有,应该先考虑修复/处理corrupt的block。
**步骤1:**hbase hbck 检查输出所以ERROR信息,每个ERROR都会说明错误信息。
**步骤2:**hbase hbck -fixTableOrphones 先修复tableinfo缺失问题,根据内存cache或者hdfs table 目录结构,重新生成tableinfo文件。
**步骤3:**hbase hbck -fixHdfsOrphones 修复regioninfo缺失问题,根据region目录下的hfile重新生成regioninfo文件。
**步骤4:**hbase hbck -fixHdfsOverlaps 修复region重叠问题,merge重叠的region为一个region目录,并从新生成一个regioninfo。
**步骤5:**hbase hbck -fixHdfsHoles 修复region缺失,利用缺失的rowkey范围边界,生成新的region目录以及regioninfo填补这个空洞。
**步骤6:**hbase hbck -fixMeta 修复meta表信息,利用regioninfo信息,重新生成对应meta row填写到meta表中,并为其填写默认的分配regionserver。
**步骤7:**hbase hbck -fixAssignment 把这些offline的region触发上线,当region开始重新open上线的时候,会被重新分配到真实的RegionServer上 , 并更新meta表上对应的行信息。
离线修复
前提条件:HDFS fsck确保hbase根目录下文件没有损坏丢失,如果有,应该先考虑修复/处理corrupt的block。
步骤: 执行如下命令即可:
hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair -fix