关于启动namenode报错Gap in transactions. unable to find any edit logs containing txid 8

今天在从HA切换到普通集群环境的时候,在启动namenode后,namenode一下子就挂了,然后打开日志查看相关namenode的日志,发现报了以下的一个错误:大概意思是读取日志文件的时候没有读取到。

通过上面的信息,我们不清楚他为啥会报这样的一个错误,下面我们一起来看一下namenode的启动过程:

可以看到报错信息中调用了一个方法叫loadFromDisk和loadFSImage,因此在namenode启动的时候需要加载两个东西;

最后报错的源代码:

通过代码可以看到当流里面没有数据或者流里面的第一个txid大于你传进来的值,都会跳出循环,跳出循环后将会抛出一个IOException,即是我们上面截图所报的异常;

 

FSImage
Namenode会将HDFS的文件和目录元数据存储在一个叫fsimage的二进制文件中,每次保存fsimage之后到下次保存之间的所有hdfs操作,将会记录在editlog文件中,当editlog达到一定的大小(bytes,由fs.checkpoint.size参数定义)或从上次保存过后一定时间段过后(sec,由fs.checkpoint.period参数定义),namenode会重新将内存中对整个HDFS的目录树和文件元数据刷到fsimage文件中。Namenode就是通过这种方式来保证HDFS中元数据信息的安全性;

Fsimage是一个二进制文件,当中记录了HDFS中所有文件和目录的元数据信息;

当NN启动时,Hadoop将加载fsimage并应用所有编辑日志,同时进行大量的一致性检查,如果检查失败,它将中止;

解决方法
1    在hadoop的目录下执行指令    bin/hadoop namenode -recover;
2    选择yes 然后选择C,再选择C;
3   重新启动namenode节点

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值