本文介绍HBase出现HMaster服务异常的解决方案。
具体报错
HBase 2.3.4版本的HMaster一直重启失败,错误日志如下所示。
java.io.EOFException: Cannot seek after EOF
at org.apache.hadoop.hdfs.DFSInputStream.seek(DFSInputStream.java:1447)
at org.apache.hadoop.fs.FSDataInputStream.seek(FSDataInputStream.java:65)
at org.apache.hadoop.hbase.regionserver.wal.ProtobufLogReader.initInternal(ProtobufLogReader.java:211)
at org.apache.hadoop.hbase.regionserver.wal.ProtobufLogReader.initReader(ProtobufLogReader.java:173)
问题原因
HMaster在启动时遇到recovery的wal文件为空(即文件长度为0),出现了异常,并导致HMaster启动失败。该问题出现的概率较小。
对应社区的Issue:WAL replay should ignore 0-length files。
影响范围
受影响的HBase版本为2.3.4,对应的EMR集群版本:
- EMR-5.6.0之前版本
- EMR-4.8.0至EMR-4.10.0版本(均包含)
解决方法
临时解决方案
- 从异常日志中找到并删除文件长度为0的wal文件。异常文件通常为异常日志之上的第一个文件,关键字为
regionserver.HRegion: Replaying edits from
。例如,在以上报错日志中找到的对应异常wal文件,然后删除掉。删除代码示例如下。hadoop fs -rm hdfs://emr-header-1.cluster-29****:9000/hbase/MasterData/data/master/store/1595e783b53d99cd5eef43b6debb2682/recovered.wals/10.154.69.141%2C16000%2C1649314434931.1649326063732
- 重启HMaster。在EMR控制台HBase服务的状态页面,单击HMaster操作列的重启。
彻底解决方案
说明 替换前请备份好JAR文件。
- 下载hbase-server-2.3.4.jar,并替换HBase集群header节点上对应的JAR文件。JAR文件在/usr/lib/hbase-current/lib/目录下。
- 重启HMaster。在EMR控制台HBase服务的状态页面,单击HMaster操作列的重启。