【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 网络故障排查权威指南

相关推荐
奈斯ing7 分钟前
【Redis篇】数据库架构演进中Redis缓存的技术必然性—高并发场景下穿透、击穿、雪崩的体系化解决方案
运维·redis·缓存·数据库架构
鳄鱼皮坡33 分钟前
仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器
运维·服务器
Edingbrugh.南空42 分钟前
Flink OceanBase CDC 环境配置与验证
大数据·flink·oceanbase
即将头秃的程序媛1 小时前
centos 7.9安装tomcat,并实现开机自启
linux·运维·centos
fangeqin1 小时前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
全星0071 小时前
解锁研发高效密码:全星研发项目管理APQP软件的多维助力
大数据·汽车
小Mie不吃饭1 小时前
FastAPI 小白教程:从入门级到实战(源码教程)
运维·服务器
要开心吖ZSH1 小时前
《Spring 中上下文传递的那些事儿》Part 4:分布式链路追踪 —— Sleuth + Zipkin 实践
java·分布式·spring
fo安方2 小时前
运维的利器–监控–zabbix–第三步:配置zabbix–中间件–Tomcat–步骤+验证
运维·中间件·zabbix
幼稚园的山代王2 小时前
RabbitMQ 4.1.1初体验
分布式·rabbitmq·ruby