内容纲要
概要描述
有时,HDFS 坏块或丢块会导致 hdfs 上 /hyperbase1/hbase.id 对应的 block 文件损坏或彻底丢失。由此导致 hyperbase 启动时启动不了,一直卡在如下图所示界面
详细说明
多次查看 hyperbase 的 pod,可以发现 hyperbase-master 的 pod 状态为 0/1,一直在 running、CrashLoopBackOff、Error 间重试
查看 /var/log/hyperbase1/hbase-hbase-master*.log 可以明显看到如下关键信息,可以看出 /hyperbase1/hbase.id 对应的 block 丢失
--
FATAL org.apache.hadoop.hbase.master.HMaster: Unhandled exception. Starting shutdown.
org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-839978718-172.22.39.7-1577884581081:blk_1073742293_1493 file=/hyperbase1/hbase.id
--
ERROR org.apache.hadoop.hbase.master.HMasterCommandLine: Master exiting
java.lang.RuntimeException: HMaster Aborted
--
接着可以去所有的 DataNode 上 $ find / -iname "blk_1073742293_1493*" -print 2>/dev/null
确认是不是该 block 的副本已经全部丢失了。理论上该报错情况下应该是都丢失了。$ hdfs fsck /hyperbase1/hbase.id
检查也能看出来:The filesystem under path ‘/hyperbase1/hbase.id’ is CORRUPT
解决办法:
先删除 hdfs 上的 /hyperbase1/hbase.id 文件
集群未开启安全时:
$ export HADOOP_USER_NAME=hbase && hdfs dfs -rm -f /hyperbase1/hbase.id
集群开启安全的情况下:
$ kinit hbase
$ hdfs dfs -rm -f /hyperbase1/hbase.id
然后再去重启 hyperbase,hdfs 上 /hyperbase1/hbase.id 会自动生成