赞
踩
项目相关背景:
部署hbase版本2.4.14,底层存储HDFS替换为s3对象存储。hbase关机、重启后,hbase能启动,但是所有操作无法进行,meta表消失。
遇到的问题:
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工具来修复。
#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了
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,表示成功。
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,表示成功。
查看UI页面里的表信息,system tables有meta,namespace表了。user tables里也有表了。
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万条测试数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。