hbase报错表不在线修复

# 问题描述

hbase,关机、重新启动之后,UI页面能打开,但是表都不见了。   查看master启动日志,有警告:显示元数据meta表not online。

2023-05-19 13:59:40,429 WARN  [master/dqs09:16000:becomeActiveMaster] master.HMaster: hbase:meta,,1.1588230740 is NOT online; state={1588230740 state=OPEN, ts=1684475912431, server=dqs11,16020,1684466863338}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined.

UI页面里的表信息,system tables确实看不到meta,namespace表了

# 原因分析:

UI界面,查看procedures & locks:发现有4个procedure应该是locked了,分别是115 116 117 118

# 解决方案:

通过hbck2工具来修复。

 1. 通过bypass命令,释放卡住的procedure

#hbase hbck -j <HBCK jar 包路径> -skip bypass [options] <procedure PID>

#-d 打印debug日志 -s 跳过hbase版本检测

/data01/hbase/bin/hbase --config /data01/hbase/conf hbck  -j /data01/hbase-2.4.14/hbase-hbck2-1.3.0-SNAPSHOT.jar  -d -s bypass 115 116 117 118

执行成功后,观察UI界面,查看procedures & locks:已经没有卡住的procedure了

 2. 通过assigns命令,重新分配meta表的region。

 上一步之后,会发现UI界面里system tables还是没有meta,namespace表。

 查看master日志,还是同样的警告

2023-05-19 14:20:40,441 WARN  [master/dqs09:16000:becomeActiveMaster] master.HMaster: hbase:meta,,1.1588230740 is NOT online; state={1588230740 state=OPEN, ts=1684475912431, server=dqs11,16020,1684466863338}; ServerCrashProcedures=false. Master startup cannot progress, in holding-pattern until region onlined.

这时,meta表执行assigns 命令,如下:

#hbase hbck -j <HBCK jar 包路径> -skip assigns [options] <regionname>

#-d 打印debug日志 -s 跳过hbase版本检测 -o,--override  override ownership by another procedure

/data01/hbase/bin/hbase --config /data01/hbase/conf hbck  -j /data01/hbase-2.4.14/hbase-hbck2-1.3.0-SNAPSHOT.jar  -d -s  assigns -o 1588230740

执行后。返回值如果是-1 表示执行失败,其他值则是Procedure 的PID,表示命令执行成功。如下,返回值119,表示成功。

 3. 通过assigns命令,重新分配namespace表的region。

 上一步之后,会发现UI界面里system tables还是没有meta,namespace表。

 查看master日志,namespace表也出现了不在线的警告

2023-05-19 14:28:43,568 WARN  [master/dqs09:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1684379932270.cf342dde35742dafa70e87cbac598011. is NOT online; state={cf342dde35742dafa70e87cbac598011 state=OPEN, ts=1684477600527, server=dqs13,16020,1684466863293}; ServerCrashProcedures=false. Master startup cannot progress, in holding-pattern until region onlined.

这时,namespace表也类似地执行assigns 命令,如下:

hbase hbck -j <HBCK jar 包路径> -skip assigns [options] <regionname>

#-d 打印debug日志 -s 跳过hbase版本检测 -o,--override  override ownership by another procedure

/data01/hbase/bin/hbase --config /data01/hbase/conf hbck  -j /data01/hbase-2.4.14/hbase-hbck2-1.3.0-SNAPSHOT.jar  -d -s  assigns -o cf342dde35742dafa70e87cbac598011

执行后。返回值如果是-1 表示执行失败,其他值则是Procedure 的PID,表示命令执行成功。如下,返回值121,表示成功。

 4. 通过assigns命令,重新分配用户表的region。

 上一步之后,去使用自己建的test表,做个count,发现用户表test也出现了不在线的问题。

hbase:004:0> count 'test'

org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=8, exceptions:2023-05-19T06:36:18.206Z, RpcRetryingCaller{globalStartTime=2023-05-19T06:36:16.808Z, pause=100, maxAttempts=8}, org.apache.hadoop.hbase.NotServingRegionException: org.apache.hadoop.hbase.NotServingRegionException: test,,1684379989794.7b8109ed8f9d7bbaf4560bed173ffbe7. is not online on dqs09,16020,1684475903824  at org.apache.hadoop.hbase.regionserver.HRegionServer.getRegionByEncodedName(HRegionServer.java:3392)

这时,test表也类似地执行assigns 命令,如下:

#hbase hbck -j <HBCK jar 包路径> -skip assigns [options] <regionname>

#-d 打印debug日志 -s 跳过hbase版本检测 -o,--override  override ownership by another procedure

/data01/hbase/bin/hbase --config /data01/hbase/conf hbck  -j /data01/hbase-2.4.14/hbase-hbck2-1.3.0-SNAPSHOT.jar  -d -s  assigns -o 7b8109ed8f9d7bbaf4560bed173ffbe7

执行后。返回值如果是-1 表示执行失败,其他值则是Procedure 的PID,表示命令执行成功。

执行成功后,重新count一下,还是原来的1万条测试数据。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值