无法启动 namenode.java.lang.IllegalStateException



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
************************************************************/

这可能是

1.Namenode PORT may be Change for each NODE.

这是一个特别棘手的问题。

  1. 吞下 IllegalStateExceptions 由 removeShutdownHook 在文件系统中抛出。javadoc 指出:

    公共布尔值删除关闭钩子(线程钩子( 抛出: 非法状态异常 - 如果虚拟机已在关闭

    过程中

因此,如果我们得到此异常,则意味着我们已经处于关闭过程中,因此我们不能尝试删除ShutdownHook。如果 Runtime 有一个方法 Runtime.isShutdownInProgress((,我们可以在 removeShutdownHook 调用之前检查它。就目前而言,没有这样的方法。在我看来,无论这个JIRA的需求如何,这将是一个很好的补丁。

  1. 首先不要将SIGTERM从NM发送到MR-AM。相反,我们应该公开一种机制,让 NM 礼貌地告诉 AM 它不再需要并且应该尽快关闭。即使在这之后,如果管理员用SIGTERM杀死MRAppMaster,JobHistory也会丢失,从而破坏3614的目的

我发现我的问题出在日志节点而不是名称节点中 即使 namenode 的日志显示了有问题的错误

JPS显示日志节点,但它是假的,因为日志节点服务已关闭 即使它存在于 JPS 输出中

因此,作为解决方案,我发出 hadoop-daemon.sh 停止日记节点 然后 hadoop-daemon.sh 启动日志节点

然后 namenode 再次开始工作

相关内容

最新更新