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

K8s集群中Hadoop-3.3.6 YARN任务因随机端口连接失败求助

解决Kubernetes中Hadoop 3.3.6 Wordcount任务无法连接NodeManager随机端口问题

问题根源

YARN NodeManager默认会随机分配MapReduce任务容器的通信端口,而这些随机端口未在ClusterIP Service中暴露,导致ResourceManager/DataNode无法跨Pod访问这些端口,进而任务失败。

解决方案

1. 固定NodeManager及容器端口范围

修改yarn-site.xml配置文件,添加以下配置项,强制使用固定端口/端口范围:

<!-- 固定NodeManager主通信端口 -->
<property>
  <name>yarn.nodemanager.address</name>
  <value>0.0.0.0:45454</value>
</property>

<!-- 固定NodeManager WebUI端口 -->
<property>
  <name>yarn.nodemanager.webapp.address</name>
  <value>0.0.0.0:8042</value>
</property>

<!-- 固定容器执行器通信端口 -->
<property>
  <name>yarn.nodemanager.container-executor.address</name>
  <value>0.0.0.0:45455</value>
</property>

<!-- 指定容器可用端口范围,避免随机分配 -->
<property>
  <name>yarn.nodemanager.resource.port-range</name>
  <value>30000-32767</value>
</property>

<!-- 配置NodeManager使用ResourceManager Service域名注册 -->
<property>
  <name>yarn.nodemanager.resourcemanager.address</name>
  <value>resourcemanager.hadoop.svc.cluster.local:8032</value>
</property>

<!-- 配置ResourceManager对外暴露的Service域名 -->
<property>
  <name>yarn.resourcemanager.address</name>
  <value>resourcemanager.hadoop.svc.cluster.local:8032</value>
</property>
<property>
  <name>yarn.resourcemanager.scheduler.address</name>
  <value>resourcemanager.hadoop.svc.cluster.local:8030</value>
</property>
<property>
  <name>yarn.resourcemanager.resource-tracker.address</name>
  <value>resourcemanager.hadoop.svc.cluster.local:8031</value>
</property>

2. 更新NodeManager ClusterIP Service

修改NodeManager的Service配置,暴露固定的端口及端口范围(需Kubernetes 1.20+支持端口范围):

apiVersion: v1
kind: Service
metadata:
  name: nodemanager
  namespace: hadoop
spec:
  type: ClusterIP
  selector:
    app: nodemanager
  ports:
    - name: nm-main
      port: 45454
      targetPort: 45454
    - name: nm-web
      port: 8042
      targetPort: 8042
    - name: nm-executor
      port: 45455
      targetPort: 45455
    # 暴露容器端口范围
    - name: nm-container-ports
      port: 30000
      targetPort: 30000
      endPort: 32767
      protocol: TCP

3. 验证与重启

  • 重启所有NodeManager和ResourceManager Pod,使配置生效
  • 在ResourceManager Pod中执行yarn node -list,确认NodeManager已正常注册
  • 重新运行Wordcount任务:
    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /README.txt /MROutput
    

额外检查

  • 确认Kubernetes网络策略未限制ResourceManager/DataNode Pod访问NodeManager Service的端口
  • 检查Pod的防火墙规则,确保容器端口范围(30000-32767)已开放

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:46:35