无法启动namenode.java.lang.illegalstateexception

oknrviil  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(407)

iam使用hadoop apache 2.7.1高可用性群集,该群集由两个名称节点mn1、mn2和3个日志节点组成
但是当我在集群上工作时,我遇到了以下错误
当我发布start-dfs.sh时,mn1处于待机状态,mn2处于活动状态
但在这之后,如果这两个名称节点中的一个关闭了,就不可能再打开它,下面是这两个名称节点中的一个的最后一行日志

2017-08-05 09:37:21,063 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Need to save fs image? false (staleImage=true, haEnabled=true, isRollingUpgrade=false)
2017-08-05 09:37:21,063 INFO org.apache.hadoop.hdfs.server.namenode.NameCache: initialized with 3 entries 72 lookups
2017-08-05 09:37:21,088 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Finished loading FSImage in 7052 msecs
2017-08-05 09:37:21,300 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: RPC server is binding to mn2:8020
2017-08-05 09:37:21,304 INFO org.apache.hadoop.ipc.CallQueueManager: Using callQueue class java.util.concurrent.LinkedBlockingQueue
2017-08-05 09:37:21,316 INFO org.apache.hadoop.ipc.Server: Starting Socket Reader #1 for port 8020
2017-08-05 09:37:21,353 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Registered FSNamesystemState MBean
2017-08-05 09:37:21,354 WARN org.apache.hadoop.hdfs.server.common.Util: Path /opt/hadoop/metadata_dir should be specified as a URI in configuration files. Please update hdfs configuration.
2017-08-05 09:37:21,361 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
java.lang.IllegalStateException
        at com.google.common.base.Preconditions.checkState(Preconditions.java:129)
        at org.apache.hadoop.hdfs.server.namenode.LeaseManager.getNumUnderConstructionBlocks(LeaseManager.java:119)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getCompleteBlocksTotal(FSNamesystem.java:5741)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startCommonServices(FSNamesystem.java:1063)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.startCommonServices(NameNode.java:678)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:664)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:811)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:795)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1488)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1554)
2017-08-05 09:37:21,364 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1
2017-08-05 09:37:21,365 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at mn2/192.168.25.22

************************************************************/
uujelgoq

uujelgoq1#

这可能是

1.Namenode PORT may be Change for each NODE.
ckocjqey

ckocjqey2#

我发现我的问题出在journal节点上,而不是namenode上,即使namenode的日志显示了问题中提到的错误
jps显示了journal节点,但它是假的,因为journal节点服务被关闭了,即使在jps输出中找到了它
所以作为一个解决方案,我先发布hadoop-daemon.sh stop journalnode,然后发布hadoop-daemon.sh start journalnode
然后namenode又开始工作了

vlju58qv

vlju58qv3#

这是一个特别令人烦恼的问题。
吞下文件系统中removeshutdownhook引发的illegalstateexceptions。javadoc声明:
public boolean removeshutdownhook(thread hook)抛出:illegalstateexception-如果虚拟机已经在关闭过程中
因此,如果我们得到这个异常,这意味着我们已经在关闭的过程中,所以我们不能,尽我们所能,删除shutdownhook。如果runtime有一个runtime.isshutdowninprogress()方法,我们可以在removeshutdownhook调用之前检查它。从目前的情况来看,没有这样的方法。在我看来,这将是一个很好的补丁,无论这个jira的需要。
从一开始就不会把信号从nm发送给mr am。相反,我们应该公开一种机制,让nm礼貌地告诉am它不再需要了,应该尽快关闭。即使在这之后,如果管理员用sigterm杀死mrappmaster,那么jobhistory也会丢失,从而无法达到3614的目的

相关问题