本文介绍JournalNode EditsLog异常导致NameNode启动失败的原因和解决方案。

具体报错

NameNode日志出现:FATAL org.apache.hadoop.hdfs.server.namenode.FSEditLog: Error: recoverUnfinalizedSegments failed for required journal (JournalAndStream(mgr=QJM to [xxx:8485, xxx:8485, xxx:8485], stream=null)) java.io.IOException: Timed out waiting 120000ms for a quorum of nodes to respond.
说明 NameNode日志的详细信息,请参见HDFS服务日志

问题原因

HDFS启动时无法拉取JournalNode对应的数据,此类错误的原因一般为JournalNode异常。

解决方案

登录对应的JournalNode节点,观察JournalNode的启动状态和日志,参见HDFS的部署拓扑HDFS服务日志
  • 如果JournalNode的日志无明显异常,可检查机器安全组设置,测试NameNode节点到JournalNode节点的网络联通性。
  • 如果JournalNode异常,具体错误如下:
    org.apache.hadoop.hdfs.server.namenode.FSImage: Caught exception after scanning through 0 ops from /current/edits_inprogress_0000000000000191004 while determining its valid length. Position was 1036288 java.io.IOException: Can't scan a pre-transactional edit log.

    此时需要找到健康的JournalNode节点并修复其他异常的JournalNode节点,参见修复单台JournalNode异常