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

Docker Swarm部署Hadoop3.3.6集群HDFS写入失败:无法找到DataNode

HDFS写入失败排查(Docker Swarm部署Hadoop 3.3.6集群)

问题现象

通过Docker Swarm搭建Hadoop 3.3.6集群,共3台物理机:1台部署NameNode,所有机器均部署DataNode。集群启动后NameNode、DataNode状态显示正常,WebUI无异常,但向HDFS写入数据时完全失败,NameNode日志出现如下警告:

2025-07-27 22:49:08,291 DEBUG org.apache.hadoop.hdfs.server.namenode.FSEditLog: logSync(tx) synctxid=3 lastJournalledTxId=4 mytxid=4
2025-07-27 22:49:08,443 TRACE org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy: storageTypes={DISK=3}
2025-07-27 22:49:08,444 DEBUG org.apache.hadoop.net.NetworkTopology: Failed to find datanode (scope="" excludedScope="/rack0"). numOfDatanodes=0
2025-07-27 22:49:08,444 DEBUG org.apache.hadoop.net.NetworkTopology: No node to choose.
2025-07-27 22:49:08,445 DEBUG org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy: [
  Datanode None is not chosen since required storage types are unavailable  for storage type DISK.
2025-07-27 22:49:08,445 INFO org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy: Not enough replicas was chosen. Reason: {NO_REQUIRED_STORAGE_TYPE=1}
2025-07-27 22:49:08,445 DEBUG org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy: Failed to choose remote rack (location = ~/rack0), fallback to local rack
org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy$NotEnoughReplicasException:

环境信息

  • Hadoop版本:3.3.6
  • JDK版本:17
  • 集群架构:Docker Swarm部署,3台物理机,1个NameNode,3个DataNode(每台机器1个)

相关截图

  • DataNode状态截图:DataNode状态截图
  • NameNode概览截图:NameNode概览截图
  • NameNode概览截图:NameNode概览截图

问题分析与解决方案

从日志核心报错NO_REQUIRED_STORAGE_TYPE=1和Failed to find datanode (scope="" excludedScope="/rack0"). numOfDatanodes=0来看,问题集中在机架感知配置、DataNode存储识别或Docker网络层面,按以下步骤排查:

1. 机架感知配置修正

日志显示NameNode排除/rack0机架后无可用节点,说明拓扑配置异常:

  • 检查所有节点的hadoop-env.sh,确保HADOOP_CONF_DIR指向统一配置目录,保证机架配置文件一致
  • 若用静态映射:确认topology.mapfile中所有DataNode的IP对应机架标识正确,避免所有节点都被归到/rack0,导致副本跨机架选择时无节点可用
  • 若用动态脚本:确保topology.script.file.name指定的脚本在Docker容器内可执行,且能正确返回每个DataNode的机架标识
  • 临时测试:修改hdfs-site.xml中dfs.block.replicas.proximity.aware为false,关闭机架感知后重启NameNode,验证写入是否恢复

2. DataNode存储类型验证

针对required storage types are unavailable for storage type DISK报错:

  • 检查hdfs-site.xml中dfs.datanode.data.dir配置的路径,确保Docker容器内挂载的宿主机目录存在、hadoop用户有读写权限
  • 确认dfs.storage.policy.enabled为true时,DataNode已正确注册DISK类型存储,查看DataNode日志是否有存储目录初始化失败的报错(如权限不足、磁盘空间不足)

3. Docker网络配置检查

Docker Swarm网络可能导致节点通信异常:

  • 确保所有容器使用同一可附加(attachable)的Swarm overlay网络
  • 检查core-site.xml中fs.defaultFS是否使用NameNode的Swarm服务名或宿主机可访问的IP,避免用localhost或容器内部IP导致通信阻断
  • 通过NameNode WebUI的DataNode列表,确认每个节点的注册地址可被NameNode正常访问

4. 副本数调整测试

检查hdfs-site.xml中dfs.replication配置,默认值为3。若机架感知导致部分节点被排除,实际可用节点数可能不足3,可临时将副本数改为1,测试写入是否正常,以此验证副本策略是否为问题诱因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:28:10