hadoop namenode启动不了_0790-5.16.2-NameNode服务的edits不同步异常

问题描述

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

ef3c6cd58f799d5cc52cc5fc58c52a90.png
Encountered exception loading fsimagejava.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.(NameNode.java:843) at org.apache.hadoop.hdfs.server.namenode.NameNode.(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.当前集群服务正常

8467e7f5bccf1b6b13f2960fe063a2d4.png

2.2重现过程

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

7c600357b75204936a60075de4a55573.png
83031b2b817b37ae0bf972a33ee2bf0c.png
e3abf7cb97cc191f478e5e2e3dd768a2.png

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

5eca336cd36b244a16f1c0eb21c2a6cc.png

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

a5f5c285113e13f3b3af5041e5e306b3.png
0608b5bcb0683a2d4ab50c5ff9f5161c.png

问题分析

从上面的异常日志可以看到“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/
897648f4116d9c7805bfa4e0b8557177.png

2.重启NameNode,服务正常

2cdfe2639d7431ddf7a9714dfc6220f7.png
776b04def8671ca117542685f83c554e.png

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

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

c6a4c96fab93efd1560c267ff7e93ec0.png

总结

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值