Hbase集群恢复

问题

HMaster启动报错,查看日志,发现有类似错误,猜测hbase的元数据损坏导致

2020-11-19 13:30:21,578 WARN [master/td-ubuntu:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1597675221785.30d68ed750aa095b5172c0dd1bfe322a. is NOT online; state={30d68ed750aa095b5172c0dd1bfe322a state=OPEN, ts=1605763821379, server=td-ubuntu,16020,1605615663447}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined.

方案:

停止hbase相关进程,执行

${HBASE_ROOT}/bin/stop-hbase.sh

备份hbase中原始数据(以Hbase单机部署为例)

cp -r ${hbase.rootdir}/data/data/default  ~/default_bak

注意:这里只备份了default namespace,如果存在其他namespace,需要一并备份

清空zookeeper中hbase元数据,登录zookeeper,执行rmr /hbase

[zk: localhost:2181(CONNECTED) 0] ls /
[cluster, brokers, zookeeper, admin, isr_change_notification, log_dir_event_notification, controller_epoch, device-job, consumers, latest_producer_id_block, config, hbase]
[zk: localhost:2181(CONNECTED) 1] rmr /hbase

清空hbase数据目录

rm -rf ${hbase.rootdir}/data/*

启动hbase

${HBASE_ROOT}/bin/start-hbase.sh

至此,初始化了一个空的hbase
再次关闭hbase,执行

${HBASE_ROOT}/bin/stop-hbase.sh

将备份的数据拷贝到空hbase的数据目录下

cp -r ~/default_bak/* ${hbase.rootdir}/data/data/default

将WALs日志拷贝到空hbase的WALs目录下(如再启动后提示WALs相关错误,此步骤可以忽略,但可能会丢失部分数据)

cp -r ~/default_bak/WALs/YOUR_HOSTNAME,160020,YOUR_STARTCODE/* ${hbase.rootdir}/data/WALs/YOUR_HOSTNAME,160020,YOUR_STARTCODE/ 

再次启动hbase

${HBASE_ROOT}/bin/start-hbase.sh

下载 HBase Operator Tools,解压得到hbase-hbck2-x.y.z.jar
执行region信息修复(以opentsdb表为例)

${HBASE_ROOT}/bin/hbase hbck -j ./hbase-hbck2-1.0.0.jar addFsRegionsMissingInMeta default:tsdb
${HBASE_ROOT}/bin/hbase hbck -j ./hbase-hbck2-1.0.0.jar addFsRegionsMissingInMeta default:tsdb-meta
${HBASE_ROOT}/bin/hbase hbck -j ./hbase-hbck2-1.0.0.jar addFsRegionsMissingInMeta default:tsdb-tree
${HBASE_ROOT}/bin/hbase hbck -j ./hbase-hbck2-1.0.0.jar addFsRegionsMissingInMeta default:tsdb-uid

再次重启hbase,并在hbase shell中对以上表执行disable && enable操作

你可能感兴趣的:(Hbase集群恢复)