启动hadoop集群的时候只能启动一个namenode,另一个报错There appears to be a gap in the edit log. We expected txid 6, but got txid 10.

背景:昨晚11点40几分,终于各个集群组件都启动成功了,然后心满意足的去睡觉了,但是今早再起来再去启动的时候就出现了namenode的问题,然后就开始了查找原因的艰辛历程。

查看报错的log日志:

2019-04-07 13:22:57,746 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimage
java.io.IOException: There appears to be a gap in the edit log. We expected txid 6, but got txid 10.
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:835)
at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:690)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:281)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1063)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:767)
at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:609)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:670)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:838)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:817)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1538)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1606)

我把问题复制去网上搜,大多都是让修复:

原因:namenode元数据被破坏,需要修复
解决:恢复一下namenode

hadoop namenode -recover

我是第一次搭建集群所以没有数据丢失的风险,所以就执行了但是,在修复中还是报错了。

最终找到以下这篇文章,解决了我的问题非常感谢:以下是摘抄了几个重点

解决方法:这里基本上看不懂,跳过吧

namenode在启动的过程中,最重要的一个动作就是拼凑集群的元数据,有哪些文件和目录,分别存放在哪里等信息。这个重要的过程分两步:

(1) 读取fsimage和edits数据,拼凑出元数据。注意,这里的元数据是指,有哪些目录和文件,每个文件有多大这样的信息。

(2) 获取每个datanode的汇报信息,整合出完整的blockMap。这里就还包括文件和实际存储的映射关系,一个文件具体存放在那个节点。

以下是对日志的分析

查看日志中的报错信息,可以明显地看到,这个问题是发生在FSEditLogLoader.loadFSEdits这个方法中,也就是在获取edits文件时报错。这里要注意的一点是,在配置有ha的hadoop2.0集群中,namenode启动时的fsimage是直接从本地获取,而edits是从journalnode上获取的。 所以 “There appears to be a gap in the edit log. We expected txid 6, but got txid 10.. ” 这个问题肯定是发生在journalnode上,而不是namenode上的。(读懂这里基本上就知道原理,读不懂也没关系,继续往下看),英文的意思是日志有空白,我们期望得到txid为6,得到的确是10 。

网上有一种解决方法,说是把active namenode上的name文件夹拷贝到standby namenode上。我试了,而且拷贝过来的name目录中也有176531929这条Edits数据,但启动namenode时还是报同样的错,说找不到176531929这条edit数据。说明这个方法不可行! 因为Edits是要在启动时去journalnode上读取的。这个问题的根本原因是你的journalnode上存在Edits数据丢失的情况。这一句看懂就基本上找到原因了,也有方向了,在HA的解读中就有说明,

所以我去查看我的journalnode目录,果然发现journalnode/yarncluster/current下面没有176531929这一条Edits数据。所以,这就是这个错误出现的根本原因。然后解决办法很简单,从active namenode上拷贝这条Edits数据到所有journalnode中。重新启动,问题解决,没有数据丢失,也不需要recovery。

以上的蓝色字体都是摘抄别人博客,黑色和红色是自己的标记和理解。

我根据我自身的错误“我们期望得到txid为6,得到的确是10 。”去active的nn里找到txid文件,将其复制上传到无法启动nn的那台机器的相同位置,并把原来的txid文件给删掉。

重新启动OK啦!!!好开森!!!

参考博客:https://blog.csdn.net/amber_amber/article/details/46896719

原文地址:https://www.cnblogs.com/xuziyu/p/10665176.html

时间: 2024-11-06 04:35:46

启动hadoop集群的时候只能启动一个namenode,另一个报错There appears to be a gap in the edit log. We expected txid 6, but got txid 10.的相关文章

hadoop错误FATAL org.apache.hadoop.hdfs.server.namenode.NameNode Exception in namenode join java.io.IOException There appears to be a gap in the edit log

错误: FATAL org.apache.hadoop.hdfs.server.namenode.NameNode Exception in namenode join java.io.IOException There appears to be a gap in the edit log 原因: namenode元数据被破坏,需要修复 解决:     恢复一下namenode hadoop namenode –recover 一路选择c,一般就OK了 如果,您认为阅读这篇博客让您有些收获,不

shell启动hadoop集群

原创,转载请注明.谢谢 shell启动hadoop集群1:明确启动顺序 1)启动zookeeper集群(分别在centos 4-02,centos6-02,centos7-02) app/zookeeper-3.4.5/bin/zkServer.sh start //启动进程 app/zookeeper-3.4.5/bin/zkServer.sh status //查看状态 2)启动journalnode(分别在centos 4-02,centos6-02,centos7-02) app/had

启动hadoop集群

1.配置core-site.xml(每个节点上都要配置) 路径: /usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml 作用: 告诉所有机器master的相关信息 配置项: name: fs.defaultFS vale: hdfs://master的地址:端口 例如: <property> <name>fs.defaultFS</name> <value>hdfs://192.168.0.104:9000<

Hadoop集群大数据平台搭建

Hadoop集群环境搭建配置 前言 Hadoop的搭建分为三种形式:单机模式.伪分布模式.完全分布模式,只要掌握了完全分布模式,也就是集群模式的搭建,剩下的两种模式自然而然就会用了,一般前两种模式一般用在开发或测试环境下,Hadoop最大的优势就是分布式集群计算,所以在生产环境下都是搭建的最后一种模式:完全分布模式. 硬件选择 须知: 分布式环境中一个服务器就是一个节点 节点越多带来的是集群性能的提升 一个Hadoop集群环境中,NameNode,SecondaryNameNode和DataNo

操作Hadoop集群

所有必要的配置完成后,将文件分发到所有机器上的HADOOP_CONF_DIR目录.这应该是所有机器上相同的目录. 一般来说,建议HDFS和YARN作为单独的用户运行.在大多数安装中,HDFS进程作为"hdfs"执行.YARN通常使用"纱线"帐户. Hadoop启动 要启动Hadoop集群,您需要启动HDFS和YARN集群. 首次升级HDFS时,必须格式化.将新的分布式文件系统格式化为hdfs: [hdfs] $ $ HADOOP_HOME / bin / hdfs

二、Hadoop集群

目的 准备工作 安装 在非保护模式下运行Hadoop 配置Hadoop的守护进程环境 在非保护模式下配置Hadoop守护进程 Hadoop的支架意识 监视健康状态的节点管理器 slaves文件 日志 操纵Hadoop集群 启动Hadoop 关闭Hadoop web接口 目的 这篇文档描述了如何安装.配置和管理从几个节点到几千个节点的Hadoop集群. 为了玩好Hadoop,你应该首先试着在单个机器上安装它(参考单个节点的建立). 准备工作 从Apache所维护的镜像文件中下载一个稳定版本的Had

Hadoop集群启动、初体验

1. 启动方式要启动Hadoop集群,需要启动HDFS和YARN两个集群.注意:首次启动HDFS时,必须对其进行格式化操作.本质上是一些清理和准备工作,因为此时的HDFS在物理上还是不存在的.hdfs namenode–format或者hadoop namenode –format1.1. 单节点逐个启动在主节点上使用以下命令启动HDFS NameNode:hadoop-daemon.sh start namenode在每个从节点上使用以下命令启动HDFS DataNode:hadoop-dae

大数据系列(2)——Hadoop集群坏境CentOS安装

前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMware虚拟机.CentOS 6.8 64 bit 安装流程 因为我的笔记本是Window7操作系统,然后内存配置,只有8G,内存配置太低了,当然为了演示,我会将Hadoop集群中的主节点分配2GB内存,然后剩余的三个节点都是1GB配置. 所有的节点存储我都设置为50GB. 在安装操作系统之前,我们需要

大数据系列(3)——Hadoop集群完全分布式坏境搭建

前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一个真正的完全分布式的Hadoop集群,闲言少叙,进入本篇的正题. 技术准备 VMware虚拟机.CentOS 6.8 64 bit 安装流程 我们先来回顾上一篇我们完成的单节点的Hadoop环境配置,已经配置了一个CentOS 6.8 并且完成了java运行环境的搭建,Hosts文件的配置.计算机名等诸多细节. 其实完成这一步之后我们就已经完成了Had