首页 新闻 会员 周边

hadoop配置kerberos后重启集群很容易发生EditLogInputException错误

0
悬赏园豆:40 [已关闭问题] 关闭于 2026-02-11 01:00

最近给测试环境的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无认证,但是我已经把所有涉及的主体都获取了一遍

一直哈基米的主页 一直哈基米 | 菜鸟二级 | 园豆:210
提问于:2026-02-10 10:44
< >
分享
所有回答(1)
0

解决了一切罪恶的源头,是core-site里auth_to_local少了一个jn主体映射成hdfs的规则,导致服务启动namenode去获取最新的edit快照kerberos认证信息不对,包括执行recover也是受这个影响,正常刷那个namenode就持有那个nn主体就行

一直哈基米 | 园豆:210 (菜鸟二级) | 2026-02-11 01:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册