前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0790-5.16.2-NameNode服务的edits不同步异常

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

作者头像
Fayson
发布2020-07-21 14:14:00
2.4K0
发布2020-07-21 14:14:00
举报
文章被收录于专栏:Hadoop实操

问题描述

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

代码语言:javascript
复制
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.当前集群服务正常

2.2重现过程

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

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

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

问题分析

从上面的异常日志可以看到“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文件

代码语言:javascript
复制
[root@cdp2 current]# pwd
/dfs/nn/current
[root@cdp2 current]# mv edits_0000000000001904836-0000000000001904904 /dfs/jn/dd/current/

2.重启NameNode,服务正常

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

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

总结

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档