Hadoop Namenode未在没有格式化的情况下启动

Hadoop Namenode未在没有格式化的情况下启动,hadoop,hdfs,namenode,Hadoop,Hdfs,Namenode,我有一个hadoop集群在高可用性下手动设置,有一个主namenode、一个备用namenode和一个datanode。我在初始启动过程中格式化了namenode,但是如果所有服务器都因为断电而关闭,我必须重新启动所有服务,例如journal node、zookeeper、namenode、datanode和故障转移守护进程 但是,当我在两个namenode上启动故障转移守护程序(dfszkfailover)时,namenode会在这两个节点上停止。为了启动它,我必须格式化namenode(在主

我有一个hadoop集群在高可用性下手动设置,有一个主namenode、一个备用namenode和一个datanode。我在初始启动过程中格式化了namenode,但是如果所有服务器都因为断电而关闭,我必须重新启动所有服务,例如journal node、zookeeper、namenode、datanode和故障转移守护进程

但是,当我在两个namenode上启动故障转移守护程序(dfszkfailover)时,namenode会在这两个节点上停止。为了启动它,我必须格式化namenode(在主namenode上)并删除临时文件

这是我的本地设置,必须在生产中集成。我无法在生产环境中继续格式化namenode,因为我将丢失所有数据

我阅读了一些解释将namenode和datanode目录(在hdfs site.xml中)指向/tmp以外的特定文件夹的答案。我已经把它指向了我的主目录

请建议一些方法,以便namenode和故障转移守护进程都在不格式化namenode的情况下启动

编辑--我正在共享namenode nn1日志的最后100行


192.168.12.12:8485: Journal Storage Directory /tmp/hadoop/dfs/journalnode/ha-cluster not formatted
    at org.apache.hadoop.hdfs.qjournal.server.Journal.checkFormatted(Journal.java:479)
    at org.apache.hadoop.hdfs.qjournal.server.Journal.getLastPromisedEpoch(Journal.java:247)
    at org.apache.hadoop.hdfs.qjournal.server.JournalNodeRpcServer.getJournalState(JournalNodeRpcServer.java:139)
    at org.apache.hadoop.hdfs.qjournal.protocolPB.QJournalProtocolServerSideTranslatorPB.getJournalState(QJournalProtocolServerSideTranslatorPB.java:118)
    at org.apache.hadoop.hdfs.qjournal.protocol.QJournalProtocolProtos$QJournalProtocolService$2.callBlockingMethod(QJournalProtocolProtos.java:25415)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:503)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:989)
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:871)
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:817)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1893)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2606)

    at org.apache.hadoop.hdfs.qjournal.client.QuorumException.create(QuorumException.java:81)
    at org.apache.hadoop.hdfs.qjournal.client.QuorumCall.rethrowException(QuorumCall.java:286)
    at org.apache.hadoop.hdfs.qjournal.client.AsyncLoggerSet.waitForWriteQuorum(AsyncLoggerSet.java:142)
    at org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager.createNewUniqueEpoch(QuorumJournalManager.java:180)
    at org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager.recoverUnfinalizedSegments(QuorumJournalManager.java:438)
    at org.apache.hadoop.hdfs.server.namenode.JournalSet$8.apply(JournalSet.java:624)
    at org.apache.hadoop.hdfs.server.namenode.JournalSet.mapJournalsAndReportErrors(JournalSet.java:393)
    at org.apache.hadoop.hdfs.server.namenode.JournalSet.recoverUnfinalizedSegments(JournalSet.java:621)
    at org.apache.hadoop.hdfs.server.namenode.FSEditLog.recoverUnclosedStreams(FSEditLog.java:1521)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startActiveServices(FSNamesystem.java:1180)
    at org.apache.hadoop.hdfs.server.namenode.NameNode$NameNodeHAContext.startActiveServices(NameNode.java:1919)
    at org.apache.hadoop.hdfs.server.namenode.ha.ActiveState.enterState(ActiveState.java:61)
    at org.apache.hadoop.hdfs.server.namenode.ha.HAState.setStateInternal(HAState.java:64)
    at org.apache.hadoop.hdfs.server.namenode.ha.StandbyState.setState(StandbyState.java:49)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.transitionToActive(NameNode.java:1777)
    at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.transitionToActive(NameNodeRpcServer.java:1649)
    at org.apache.hadoop.ha.protocolPB.HAServiceProtocolServerSideTranslatorPB.transitionToActive(HAServiceProtocolServerSideTranslatorPB.java:107)
    at org.apache.hadoop.ha.proto.HAServiceProtocolProtos$HAServiceProtocolService$2.callBlockingMethod(HAServiceProtocolProtos.java:4460)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:503)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:989)
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:871)
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:817)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1893)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2606)
2019-12-06 10:57:57,541 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1: Error: recoverUnfinalizedSegments failed for required journal (JournalAndStream(mgr=QJM to [192.168.12.10:8485, 192.168.12.11:8485, 192.168.12.12:8485], stream=null))
2019-12-06 10:57:57,546 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at nn1/192.168.12.10
************************************************************/

你能在这里发布namenode的日志吗?此外,请检查每个节点的群集ID。一切都应该同步。集群ID可以在namenode/datanode下的版本文件中找到,然后在hdfs site.xml中配置当前目录。我已经添加了日志。我还检查了cluser id的版本。这在所有三个节点上都是相同的。您可以做的几件事-1。检查目录“/tmp/hadoop/dfs/journalnode/ha cluster”是否与hadoop配置文件中配置的目录同步。2.尝试在除/tmp之外的任何其他路径中设置此目录。3.在重新启动服务之前键入“jps”。只是为了检查是否有任何僵尸进程正在运行。我没有提到任何类似“/tmp/hadoop/dfs/journalnode/ha cluster”的路径。在我的core-site.xml中,我添加了属性-dfs.journalnode.edits.dir,并在其中添加了指向我的主目录的路径。我是否必须在hdfs-site.xml中提及dfs.journalnode.edits.dir,或者在hdfs-site.xml或core-site.xml中提及任何其他属性?