问题:
服务器掉电后重启服务器,并重启Hadoop、Zookeeper、HBase服务后,进程均一切正常,但是在HBase Web界面查看不到一张表,包括元数据表。使用 shell 命令扫描数据表提示表不存在错误。
分析:
看下Master的日志,发现一条WARN日志:
下午1点59:29.953分 WARN HMaster
hbase:namespace,,1602737534746.41cb240b37c7ba2e67a1bff035799b61. is NOT online; state={41cb240b37c7ba2e67a1bff035799b61 state=OPEN, ts=1605238978817, server=bg11194.hadoop.com,16020,1602750152053}; ServerCrashProcedures=false. Master startup cannot progress, in holding-pattern until region onlined.
org.apache.hadoop.hbase.PleaseHoldException: Master is initializing 代表Master正在初始化中,出现这种错误的原因有很多,查看hbase web界面,发现如下提示: 系统表hbase:namespace,1602737534746.41cb240b37c7ba2e67a1bff035799b61未分配到RegionServer上。
既然是元数据出现错误,可以尝试手动修复元数据,如果修复失败暴力删除元数据(做好备份),重启HBase后生成新的元数据,这是只需要手动将数据表添加 region 信息到 meta 表,再 assign 即可。
解决
尝试1:重启hbase,发现无效
尝试2:手动分配,执行 assign namespace,1602737534746.41cb240b37c7ba2e67a1bff035799b61,无效,仍提示org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
尝试3: 1、停止 HBase 服务,删除 Zookeeper 中 /hbase 目录,重启 HBase
zk 数据备份: 1)进入 zk 配置的数据目录下的 version-2 目录,比较 zk 集群每个节点的 snapshot 文件,对最新的 snapshot. 和对应的 log. 文件进行备份(zookeeper事务ID是递增的) 2)deleteall /hbase
2、重启 HBase 后,添加表 region 信息到 meta 表
系统表 hbase hbck -j $HBASE_HOME/lib/hbase-hbck2-1.3.0-SNAPSHOT.jar addFsRegionsMissingInMeta hbase:namespace 用户数据表 hbase hbck -j $HBASE_HOME/lib/hbase-hbck2-1.3.0-SNAPSHOT.jar addFsRegionsMissingInMeta default:ods_data_1
3、重启 HBase
4、重新分配 region ,使用 2 输出的结果作为参数
hbase hbck -j $HBASE_HOME/lib/hbase-hbck2-1.3.0-SNAPSHOT.jar assigns c8ec30eacde9b68d1fd568feba59354c cf9d13dbdc0384dff5bdc494f39e1f71 d7b1b20b61143519835ef692b767471c de22be87c5f9458ffe17446f66ee9d02 dee929bc685939371b73485775f285b9 eb805bd3ed5a4c9a2ecbbca4c49395ed
到此一切恢复正常!
|