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
相关产品推荐
相关产品推荐

