关于hadoop无法启动namenode的问题解决方法之一

关于hadoop无法启动namenode报错:java.io.IOException: Gap in transactions. Expected to be able to read up until at least txid 1365 but unable to find any edit logs containing txid 1的问题

1.问题:

今天在正常使用start-all.sh启动hadoop时发现所有服务都可以启动,唯独namenode节点启动不来.

后来尝试在hadoop用户下使用单一节点启动方法
hadoop-daemon.sh start namenode
指令来启动,还是启动失败。

最后在网上找了一下原因,去hadoop家目录下的logs查看日志,查看vim hadoop-hadoop-namenode-master.log日志文件,G到最后一行发现如下报错:

2018-11-25 01:34:56,475 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
java.io.IOException: Gap in transactions. Expected to be able to read up until at least txid 1365 but unable to find any edit logs containing txid 1
at org.apache.hadoop.hdfs.server.namenode.FSEditLog.checkForGaps(FSEditLog.java:1629)
at org.apache.hadoop.hdfs.server.namenode.FSEditLog.selectInputStreams(FSEditLog.java:1587)
at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:699)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:321)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:978)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:685)
at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:585)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:645)
at org.apache.hadoop.hdfs.server.namenode.NameNode.(NameNode.java:819)
at org.apache.hadoop.hdfs.server.namenode.NameNode.(NameNode.java:803)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1500)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1566)

2.原因:

网上找了一下发现错误原因是:
Hadoop NN中的元数据包括:

fsimage:包含某个时间点的文件系统的完整状态
edit logs:包含在最近的fsimage之后进行的每个文件系统更改(文件创建/删除/修改)。

当NN启动时,Hadoop将加载fsimage并应用所有编辑日志,同时进行大量的一致性检查,如果检查失败,它将中止。当我们将NN工作区中的edits_0000000000000000001-0000000000000000002 删掉时,然后尝试sbin/start-dfs.sh,将在日志中收到edits logs信息不匹配的日志,并且启动失败。

3.解决方法:

1 在hadoop家目录bin下执行指令 ./bin/hadoop namenode -recover;
2 .在一堆提示后选择yes 然后选择C .之后日志内容将会改变;
3 使用单一节点启动命令 hadoop-daemon.sh start namenode 重新启动namenode节点。
4.然后我就启动成功了,和大家分享一下 希望有用,第一次写,有点乱请各位谅解.

你可能感兴趣的:(hadoop)