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即可正常启动。否则就需要从别处拷贝完整的回来。

### 回答1: 可能是以下原因导致hadoop namenode启动不了: 1.配置文件错误:检查hadoop配置文件中的参数是否正确设置,特别是hdfs-site.xml和core-site.xml文件。 2.权限问题:检查hadoop文件系统的权限是否正确设置,确保hadoop用户对文件系统有足够的权限。 3.端口冲突:检查hadoop namenode所使用的端口是否被其他进程占用,可以使用netstat命令查看端口占用情况。 4.磁盘空间不足:检查hadoop namenode所在的磁盘空间是否足够,如果磁盘空间不足,可能会导致hadoop namenode启动失败。 5.日志文件错误:检查hadoop namenode的日志文件,查看是否有错误信息,根据错误信息进行排查和解决。 希望以上信息能够帮助您解决hadoop namenode启动不了的问题。 ### 回答2: 首先,需要检查hadoop namenode的日志以查找任何错误信息。可以通过以下命令访问hadoop日志: cd /hadoop/logs tailf hadoop-hdfs-namenode-*.log 如果没有错误信息,则可以进一步检查以下内容: 1. 确认hadoop的配置文件是否正确配置。namenode的配置文件通常在/hadoop/etc/hadoop/hdfs-site.xml中。可以检查以下参数是否设置正确: <property> <name>dfs.namenode.rpc-address</name> <value>namenode-hostname:8020</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/hadoop/hdfs/name</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> 2. 检查hadoop的文件系统是否正确格式化。如果文件系统未正确格式化,则namenode可能无法启动。可以通过以下命令格式化文件系统: hadoop namenode -format 3. 检查系统资源是否足够。namenode需要足够的内存和硬盘空间来持久性存储文件系统的元数据。可以通过使用以下命令检查系统资源: free -mh df -h 4. 检查网络连接是否正常。namenode的启动需要依赖于网络连接。可以使用以下命令检查网络连接: ping namenode-hostname 如果上述方法都无法解决问题,则建议尝试重新安装hadoop并重新配置namenode。或联系hadoop社区,以寻求更深入的支持。 ### 回答3: 当Hadoop Namenode不能启动时,可能会发生多种原因。下面列出了几个常见的问题及其解决方案。 1. 数据目录中的文件损坏或丢失 - 在Hadoop中,Namenode存储了整个文件系统的名称空间及其文件的元数据。如果数据目录中的某些文件已损坏或丢失,Namenode将无法启动。解决此问题的方法是尝试恢复这些文件或在安装备份副本之后重新格式化Namenode。 2. 内存不足 - 如果您的机器没有足够的内存来支持Namenode进程,则可能会出现启动失败的问题。您可以通过增加内存或禁用其他应用程序以释放一些内存来解决此问题。 3. 配置文件错误 - 如果您最近对Hadoop配置文件(如core-site.xml和hdfs-site.xml)进行了更改,并且更改不正确,则可能会导致Namenode无法启动。请检查配置文件并确保它们正确配置。 4. 端口冲突 - Namenode启动需要侦听不同的端口以接收客户端请求。如果其他进程正在使用相同的端口,则会发生端口冲突,并且Namenode将无法启动。您可以通过查找并杀死占用该端口的进程来解决此问题,并将其更改为其他未使用的端口。 5. 文件系统权限问题 - Namenode需要对数据目录和元数据文件具有适当的访问权限才能启动。如果权限不正确,则可能会出现启动失败的问题。请确保Hadoop用户具有适当的读取和写入权限,以及对Namenode文件具有所有权。 6. Java版本不兼容 - Namenode需要与Hadoop兼容的Java版本。如果Java版本过低或过高,可能会导致Namenode启动失败。请确保您的Java版本符合Hadoop的要求。 总之,启动失败的问题可能有很多原因。您需要审查错误日志以确定具体原因,并采取相应的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值