0
点赞
收藏
分享

微信扫一扫

0790-5.16.2-NameNode服务的edits不同步异常

_铁马冰河_ 2022-09-08 阅读 163

问题描述




启动NameNode时候出现下面异常信息,启动失败

0790-5.16.2-NameNode服务的edits不同步异常_java


Encountered exception loading fsimage
java.io.IOException: There appears to be a gap in the edit log. We expected txid 2638640356, but got txid 2638864045.
at org.apache.hadoop.hdfs.server.namenode.MetaRecoveryContext.editLogLoaderPrompt(MetaRecoveryContext.java:94)
at org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadEditRecords(FSEditLogLoader.java:212)
at org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadFSEdits(FSEditLogLoader.java:140)
at org.apache.hadoop.hdfs.server.namenode.FSImage.loadEdits(FSImage.java:846)
at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:701)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:292)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1081)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:778)
at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:613)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:675)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:843)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:822)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1543)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1611)


Failed to start namenode.
java.io.IOException: There appears to be a gap in the edit log. We expected txid 2638640356, but got txid 2638864045.
at org.apache.hadoop.hdfs.server.namenode.MetaRecoveryContext.editLogLoaderPrompt(MetaRecoveryContext.java:94)
at org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadEditRecords(FSEditLogLoader.java:212)
at org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadFSEdits(FSEditLogLoader.java:140)
at org.apache.hadoop.hdfs.server.namenode.FSImage.loadEdits(FSImage.java:846)
at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:701)


这问题重现




2.1当前集群状态

1.集群版本是5.16.2

2.集群HDFS服务启用了高可用

3.当前集群服务正常

0790-5.16.2-NameNode服务的edits不同步异常_java_02


2.2重现过程

1.移走集群中所有JournalNode节点目录下的同一个edits文件,比如下面图片中的文件   edits_0000000000001904836-0000000000001904904

0790-5.16.2-NameNode服务的edits不同步异常_java_03

0790-5.16.2-NameNode服务的edits不同步异常_hdfs_04

0790-5.16.2-NameNode服务的edits不同步异常_apache_05


2.重启NameNode,重现启动失败的异常

0790-5.16.2-NameNode服务的edits不同步异常_apache_06


3.查看NameNode启动日志,可以看到下面的报错和上文的一样

0790-5.16.2-NameNode服务的edits不同步异常_java_07

0790-5.16.2-NameNode服务的edits不同步异常_apache_08


问题分析





从上面的异常日志可以看到“We expected txid 1904836, but got txid 1904905”是edits log日志有丢失,预期的txid是1904836,但是当前的txid为1904905。

我们手动移走的文件为edits_0000000000001904836-0000000000001904904,ID与报错信息吻合,在启动NameNode的时候,合并edits log文件,找不到我们移走的文件,导致合并失败,就造成了启动NameNode失败。


问题解决





根据上文的分析,我们需要把丢失的edits文件拷贝回去。

1.这里可以从Active NameNode或者Standby NameNode的数据目录中去拷贝回来丢失的edits文件

[root@cdp2 current]# pwd
/dfs/nn/current
[root@cdp2 current]# mv edits_0000000000001904836-0000000000001904904 /dfs/jn/dd/current/

0790-5.16.2-NameNode服务的edits不同步异常_hdfs_09


2.重启NameNode,服务正常

0790-5.16.2-NameNode服务的edits不同步异常_hdfs_10

0790-5.16.2-NameNode服务的edits不同步异常_hdfs_11


3.进行HDFS验证,服务正常

进行文件上传和查看均正常。

0790-5.16.2-NameNode服务的edits不同步异常_java_12


总结




1.NameNode启动时的fsimage是直接从本地获取,而edits是从JournalNode上获取的。根据日志的异常提示,edits文件不同步,所以需要去JournalNode节点上确认是否缺失了日志提示的文件块。

2.在NameNode的数据目录中,保存有edits log文件,由于JournalNode数据目录的文件丢失,所以可以从NameNode节点的数据目录找到丢失的文件,复制到JournalNode的数据目录下,再重启NameNode即可。

3.在所有的JournalNode的数据目录中,只需要任意一个目录edits log文件是完整的,NameNode即可正常启动。否则就需要从别处拷贝完整的回来。


举报

相关推荐

0 条评论