AWS搭建Hadoop集群运行WordCount异常求助:资源与节点显示问题
解决AWS上Hadoop集群WordCount任务停滞&NodeManager无法注册的问题
看起来你遇到的是NodeManager无法成功注册到ResourceManager的典型问题——这也是导致任务一直卡在"running job"、8088控制台显示0节点、资源为<memory:0, vCores:0>的核心原因。结合你已经尝试修改yarn-site.xml但未解决的情况,我给你梳理几个关键排查步骤,按顺序来应该能定位问题:
1. 先排查网络连通性(AWS环境最容易踩的坑)
NodeManager需要和ResourceManager建立RPC连接才能注册,AWS的安全组配置经常会漏掉相关端口:
- 在任意NodeManager节点上,测试能否访问ResourceManager的关键端口:
# 测试ResourceManager的RPC地址端口(默认8030) nc -zv <你的RM主机名/IP> 8030 # 测试资源跟踪端口(默认8031) nc -zv <你的RM主机名/IP> 8031 # 测试调度器端口(默认8032) nc -zv <你的RM主机名/IP> 8032 - 如果返回"Connection refused",立刻检查AWS安全组:确保所有NodeManager实例的安全组允许出站访问ResourceManager实例的8030/8031/8032端口;同时ResourceManager的安全组允许入站接收这些端口的流量。
- 另外,检查所有节点的主机名解析:在NodeManager节点上ping ResourceManager的主机名(比如
namenode),看能否返回正确的IP。如果解析失败,要么修改/etc/hosts文件添加对应映射,要么在yarn-site.xml里直接用IP地址代替主机名。
2. 重新核对yarn-site.xml的核心配置
你已经修改过内存和核心数,但可能漏掉了注册相关的关键配置,或者配置冲突:
- 确保以下三个配置指向正确的ResourceManager地址(不要拼写错误):
<property> <name>yarn.resourcemanager.address</name> <value>namenode:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>namenode:8031</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>namenode:8032</value> </property> - 检查资源配置的合理性:
yarn.nodemanager.resource.memory-mb不能超过EC2实例的实际可用内存(比如t2.medium实例有4G内存,建议设为3072,留1G给系统);yarn.nodemanager.resource.cpu-vcores不要超过实例的vCore数;- 关键:
yarn.scheduler.minimum-allocation-mb必须小于等于yarn.nodemanager.resource.memory-mb,否则NodeManager会因为资源不符合要求而无法注册。
- 修改完配置后,一定要同步到所有节点,再重启服务。
3. 分析NodeManager的具体错误日志
你提到有NodeManager的错误日志,这是定位问题的关键:
- 如果日志里有
Connection refused:回到第一步,解决网络/端口问题; - 如果日志里有
Insufficient resource:检查第二步的资源配置冲突,调整scheduler.minimum-allocation-mb或nodemanager.resource.memory-mb; - 如果日志里有
Hostname cannot be resolved:修复主机名解析问题; - 如果日志里有
Permission denied:检查Hadoop的权限配置,确保NodeManager进程有足够的权限访问YARN的工作目录(比如/tmp/hadoop-yarn)。
4. 按正确顺序重启YARN服务
重启服务的顺序很重要,错误的顺序可能导致NodeManager无法注册:
- 先在ResourceManager节点停止RM:
yarn-daemon.sh stop resourcemanager - 在所有NodeManager节点停止NM:
yarn-daemon.sh stop nodemanager - 先启动ResourceManager:
yarn-daemon.sh start resourcemanager - 再启动所有NodeManager:
yarn-daemon.sh start nodemanager - 等待1-2分钟后,刷新
namenode:8088/cluster/nodes页面,看节点是否已经注册。
5. 检查ResourceManager的状态和日志
如果以上步骤都没解决,查看ResourceManager的日志(默认路径$HADOOP_HOME/logs/yarn-*-resourcemanager-*.log):
- 看有没有拒绝NodeManager注册的日志信息,比如配置不匹配、权限问题;
- 运行命令确认RM状态是否正常:
返回yarn rmadmin -getServiceState rmACTIVE才是正常状态,如果是STANDBY,说明可能配置了HA但没正确启动。
按照这个流程排查,大部分AWS上的YARN节点注册问题都能解决。如果还是不行,可以把NodeManager的具体错误日志贴出来,我再帮你分析。
内容的提问来源于stack exchange,提问作者franchyze923
相关产品推荐
相关产品推荐

