最近给测试环境的hadoop配置了kerberos,但是发现重启集群非常容易发生EditLogInputException错误,导致namenode起不来,报错如下
2026-02-08 22:32:42,281 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
org.apache.hadoop.hdfs.server.namenode.EditLogInputException: Error replaying edit log at offset 0. Expected transaction ID was 80808
at org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadEditRecords(FSEditLogLoader.java:256)
at org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadFSEdits(FSEditLogLoader.java:182)
at org.apache.hadoop.hdfs.server.namenode.FSImage.loadEdits(FSImage.java:914)
at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:761)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:338)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1135)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:750)
at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:658)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:734)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:977)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:950)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1723)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1790)
Caused by: org.apache.hadoop.hdfs.server.namenode.RedundantEditLogInputStream$PrematureEOFException: got premature end-of-file at txid 80807; expected file to go up to 80809
at org.apache.hadoop.hdfs.server.namenode.RedundantEditLogInputStream.nextOp(RedundantEditLogInputStream.java:208)
at org.apache.hadoop.hdfs.server.namenode.EditLogInputStream.readOp(EditLogInputStream.java:85)
at org.apache.hadoop.hdfs.server.namenode.EditLogInputStream.skipUntil(EditLogInputStream.java:151)
at org.apache.hadoop.hdfs.server.namenode.RedundantEditLogInputStream.nextOp(RedundantEditLogInputStream.java:190)
at org.apache.hadoop.hdfs.server.namenode.EditLogInputStream.readOp(EditLogInputStream.java:85)
at org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadEditRecords(FSEditLogLoader.java:243)
... 12 more
2026-02-08 22:32:42,282 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1: org.apache.hadoop.hdfs.server.namenode.EditLogInputException: Error replaying edit log at offset 0. Expected transaction ID was 80808
由于有快照,所以我多次尝试复现问题,发现两类情况。一个是重启集群,这块我觉得是我操作问题,由于是测试环境所有没严格按照先进安全模式,再陆续退出所有节点,而是直接执行了 stop-dfs 脚本。二是改hdfs配置重启时也会出现这个问题,比如给presto配置hivecatalog的认证主体,hadoop这边需要有一个presto用户的代理,改完重启就复现了
后面在尝试解决的过程中,发现关掉暂时关掉配置文件中的kerberos认证,随后执行 hdfs namenode -recover 集群可恢复正常,但是再次开启kerberos认证,namenode就又挂掉了,而且是同样的报错。因为我现在想不明白这种场景下如何恢复 editlog 文件
还有一个很奇怪的问题,在kerberos开启的前提下,执行 hdfs namenode -recover 始终报错连接jounal无认证,但是我已经把所有涉及的主体都获取了一遍