You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行hdfs dfs -mkdir /app时Active NameNode异常终止问题求助

问题分析与解决步骤

问题现象

执行hdfs dfs -mkdir /app时,Active NameNode(apache-hadoop-namenode-0)异常终止,写操作失败。

关键日志解析(已翻译)

$ oc exec -it apache-hadoop-namenode-0 -c namenode -- bash

$ hdfs dfs  -mkdir /app
警告: HADOOP_PREFIX已被HADOOP_HOME替代,将使用HADOOP_PREFIX的值。
{"name":"org.apache.hadoop.io.retry.RetryInvocationHandler","time":1661110979165,"date":"2022-08-21 19:42:59,165","level":"INFO","thread":"main","message":"java.io.EOFException: 本地主机与目标主机之间出现文件结束异常:本地主机为\"apache-hadoop-namenode-0.apache-hadoop-namenode.nom-backend.svc.cluster.local/10.128.3.182\"; 目标主机为\"apache-hadoop-namenode-0.apache-hadoop-namenode.nom-backend.svc.cluster.local\":8020; 异常为java.io.EOFException。调用ClientNamenodeProtocolTranslatorPB.mkdirs接口访问该节点时触发异常,将立即尝试故障转移。"}
{"name":"org.apache.hadoop.io.retry.RetryInvocationHandler","time":1661110979206,"date":"2022-08-21 19:42:59,206","level":"INFO","thread":"main","message":"org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): 备用状态不支持WRITE类操作。
\tat org.apache.hadoop.hdfs.server.namenode.ha.StandbyState.checkOperation(StandbyState.java:108)
\tat org.apache.hadoop.hdfs.server.namenode.NameNode$NameNodeHAContext.checkOperation(NameNode.java:2094)
\tat org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkOperation(FSNamesystem.java:1550)
\tat org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:3397)
\tat org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:1159)
\tat org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.mkdirs(ClientNamenodeProtocolServerSideTranslatorPB.java:740)
\tat org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
\tat org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:604)
\tat org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:572)
\tat org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:556)
\tat org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1093)
\tat org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:1043)
\tat org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:971)
\tat java.security.AccessController.doPrivileged(Native Method)
\tat javax.security.auth.Subject.doAs(Subject.java:422)
\tat org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1878)
\tat org.apache.hadoop.ipc.Server$Handler.run(Server.java:2976)
调用ClientNamenodeProtocolTranslatorPB.mkdirs接口访问apache-hadoop-namenode-1.apache-hadoop-namenode.nom-backend.svc.cluster.local/10.131.0.246:8020时触发该异常,已尝试1次故障转移,将等待830ms后再次尝试。"}
{"name":"org.apache.hadoop.io.retry.RetryInvocationHandler","time":1661110980038,"date":"2022-08-21 19:43:00,038","level":"INFO","thread":"main","message":"java.net.ConnectException: 从apache-hadoop-namenode-0.apache-hadoop-namenode.nom-backend.svc.cluster.local/10.128.3.182连接到该节点8020端口失败,连接异常为java.net.ConnectException: 连接被拒绝。调用ClientNamenodeProtocolTranslatorPB.mkdirs接口时触发该异常,已尝试2次故障转移,将等待2255ms后再次尝试。"}

日志核心问题

  1. 原Active NameNode服务异常终止,导致连接出现EOF异常,后续重试时直接被拒绝。
  2. HA集群自动故障转移未正常触发:Standby节点未切换为Active状态,写操作被拒绝。

解决步骤

  1. 检查NameNode状态
    执行命令确认两个节点的服务状态:

    hdfs haadmin -getServiceState apache-hadoop-namenode-0
    hdfs haadmin -getServiceState apache-hadoop-namenode-1
    
  2. 手动触发故障转移
    如果Standby节点仍处于备用状态,手动将其切换为Active:

    hdfs haadmin -failover apache-hadoop-namenode-0 apache-hadoop-namenode-1
    

    执行完成后再次验证节点状态,确认apache-hadoop-namenode-1已变为Active。

  3. 排查原Active节点终止原因
    进入原节点查看详细日志,定位服务终止根因:

    oc exec -it apache-hadoop-namenode-0 -c namenode -- bash
    # 日志路径需根据实际部署调整
    cat /var/log/hadoop/hdfs/hadoop-hdfs-namenode-apache-hadoop-namenode-0.log
    

    常见原因包括:内存不足、磁盘空间耗尽、ZKFC进程故障、元数据损坏等。

  4. 修复原节点并恢复HA冗余
    根据排查结果修复问题后,重新启动原节点的NameNode服务,使其回到Standby状态:

    oc exec -it apache-hadoop-namenode-0 -c namenode -- hdfs --daemon start namenode
    
  5. 验证自动故障转移配置
    检查hdfs-site.xml中的HA配置,确保自动故障转移已启用:

    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    

    同时确认ZKFC进程在两个节点上均正常运行:

    oc exec -it apache-hadoop-namenode-0 -c namenode -- jps | grep DFSZKFailoverController
    oc exec -it apache-hadoop-namenode-1 -c namenode -- jps | grep DFSZKFailoverController
    

内容的提问来源于stack exchange,提问作者Abhishek Karigar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:39:16