【Hadoop 实战】Yarn 模式上传 HDFS 卡顿时 “No Route to Host“ 错误深度解析与解决方案

🌟 飞哥带你攻克 Hadoop 网络通信难题

大家好,我是小飞!最近在大数据集群运维中遇到一个典型问题:使用 Yarn 模式向 HDFS 上传大文件时进度条卡住不动 ,查看日志发现关键报错:
No Route to Host from BigData01/192.168.100.128 to BigData03:44620 failed on

这个看似简单的网络错误,背后隐藏着 Hadoop 集群通信的核心逻辑。本文将结合生产环境实战经验,带大家抽丝剥茧解决问题,文末附完整排查脚本!

🚀 一、问题场景复现

1. 环境背景

  • 集群规模:3 节点(BigData01 主节点,BigData02/03 数据节点)
  • 部署模式:Hadoop 3.3.6 + Yarn + HDFS 分布式存储
  • 操作场景:通过hadoop fs -put命令向 HDFS 上传 50GB 日志文件,任务长时间无进展

2. 关键日志分析

bash 复制代码
2025-05-18 14:23:45,678 ERROR org.apache.hadoop.ipc.Client: 
No route to host from BigData01/192.168.100.128 to BigData03:44620 failed on 
java.net.NoRouteToHostException: No route to host
	at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
	...(省略栈跟踪)

核心问题:主节点(BigData01)无法建立到数据节点(BigData03)的网络连接,端口 44620 通信失败。

🛠️ 二、深度排查:从网络层到 Hadoop 服务

🔍 第一步:网络层基础检查

1. 节点连通性测试
bash 复制代码
# 在BigData01上测试到BigData03的连通性
ping BigData03 -c 5  # 测试ICMP协议
telnet BigData03 44620  # 测试目标端口连通性
  • 现象 :ping 通但 telnet 端口失败 → 说明端口级通信受阻
2. 路由表与子网配置验证
bash 复制代码
# 查看主节点路由表
ip route show 
# 检查子网掩码(示例:应为24位掩码)
ifconfig eth0 | grep "inet addr"  # 确认IP与掩码匹配
  • 常见问题
    ✅ 若默认网关缺失 → sudo ip route add default via 192.168.100.1
    ✅ 若子网掩码错误(如误设为 16 位)→ 导致跨子网路由失败

🔍 第二步:Hadoop 服务端口分析

Hadoop 组件通信依赖固定端口,需确认端口是否正确配置且可达:

组件 端口 用途
DataNode 9867 数据传输端口(默认)
NodeManager 44620 Yarn 节点管理器通信端口
ResourceManager 8088 Yarn 资源管理 Web 界面
1. 端口配置校验
bash 复制代码
# 查看Hadoop配置文件(以Yarn为例)
cat $HADOOP_CONF_DIR/yarn-site.xml | grep -i "port"
# 预期配置:
<property>
  <name>yarn.nodemanager.address</name>
  <value>BigData03:44620</value>
</property>
2. 端口监听状态检查
bash 复制代码
# 在BigData03上检查端口是否启动
ss -tunlp | grep 44620 
# 若未监听 → 重启NodeManager服务
hadoop-daemon.sh restart nodemanager

🔍 第三步:防火墙与安全组拦截

1. 本地防火墙规则排查(Linux)
bash 复制代码
# 查看iptables规则
sudo iptables -L -n 
# 临时关闭防火墙验证
sudo systemctl stop firewalld 
# 云服务器需额外检查安全组规则(如AWS Security Group)
  • 典型场景
    🔒 若存在DROP规则阻止 44620 端口 → 添加允许规则:
    sudo iptables -A INPUT -p tcp --dport 44620 -j ACCEPT
2. Hadoop 安全模式影响
bash 复制代码
# 检查HDFS安全模式状态
hdfs dfsadmin -safemode get 
# 若处于安全模式 → 强制退出(谨慎操作)
hdfs dfsadmin -safemode leave 

🔍 第四步:集群服务状态校验

bash 复制代码
# 主节点检查Yarn ResourceManager状态
yarn rmadmin -getServiceState resourcemanager 
# 数据节点检查NodeManager状态
jps | grep NodeManager  # 应返回进程ID
# 查看HDFS节点健康状态
hdfs dfsadmin -report 
  • 关键指标
    ❗ 若 NodeManager 未启动 → 检查日志$HADOOP_LOG_DIR/nodemanager.log
    ❗ 若数据节点标记为decommissioned → 重新激活节点

📝 三、完整解决方案脚本(可直接复制)

bash 复制代码
#!/bin/bash
# 飞哥专用Hadoop网络故障排查脚本
NODE_IP="192.168.100.128"  # 目标节点IP
TARGET_PORT="44620"         # 目标端口

# 1. 基础网络检测
echo "==== 1. 网络连通性测试 ===="
ping -c 3 $NODE_IP
telnet $NODE_IP $TARGET_PORT

# 2. 路由与子网检查
echo "==== 2. 路由表与子网配置 ===="
ip route show default
ifconfig | grep "inet addr"

# 3. Hadoop服务端口校验
echo "==== 3. Hadoop端口配置 ===="
grep -i "port" $HADOOP_CONF_DIR/*.xml
ss -tunlp | grep $TARGET_PORT

# 4. 防火墙临时关闭(测试用)
echo "==== 4. 临时关闭防火墙 ===="
sudo systemctl stop firewalld
sudo iptables -F

# 5. 重启相关服务
echo "==== 5. 重启服务 ===="
hadoop-daemon.sh restart nodemanager
yarn rmadmin -refreshNodes

✅ 四、问题解决验证

  1. 重新执行上传命令:
    hadoop fs -put large_file.log /user/hdfs/
  2. 监控任务进度:
    yarn application -list 查看应用状态
    hdfs dfs -du -h /user/hdfs/large_file.log 确认文件完整性

💡 飞哥经验总结

  1. 分层排查思维:从网络层(ping/telnet)→ 服务层(端口配置)→ 安全层(防火墙)逐步定位
  2. 日志为王 :Hadoop 日志($HADOOP_LOG_DIR)是故障诊断的核心线索
  3. 集群一致性:确保所有节点的 hosts 文件、主机名解析完全一致

遇到类似问题的小伙伴,欢迎在评论区留言讨论!如果觉得本文有用,记得点赞 + 收藏,关注【小飞敲代码】获取更多大数据实战干货~

参考资料

1\] Hadoop 官方文档 - Network Configuration \[2\] Linux 网络故障排查权威指南

相关推荐
面朝大海,春不暖,花不开14 分钟前
管理数据洪流:自动化处理与归档每日数据文件的策略与实践
运维·python·自动化
地衣君7 小时前
RISC-V 开发板 + Ubuntu 23.04 部署 open_vins 过程
linux·ubuntu·risc-v
5:007 小时前
云备份项目
linux·开发语言·c++
码农101号8 小时前
Linux中shell编程表达式和数组讲解
linux·运维·服务器
powerfulzyh8 小时前
非Root用户启动SSH服务经验小结
运维·ssh
云道轩8 小时前
升级centos 7.9内核到 5.4.x
linux·运维·centos
是小满满满满吗8 小时前
传输层:udp与tcp协议
linux·服务器·网络
小鸡脚来咯8 小时前
RabbitMQ入门
分布式·rabbitmq
爱学习的小道长8 小时前
Ubuntu Cursor升级成v1.0
linux·运维·ubuntu
EelBarb8 小时前
seafile:ubuntu搭建社区版seafile12.0
linux·运维·ubuntu