Kubernetes集群模式下Spark提交报UnknownHostException: spark-master
Spark on Kubernetes Cluster模式连接spark-master失败排查方案
问题核心
通过Bitnami Spark Helm Chart在Kubernetes的hm-spark命名空间部署Spark(镜像docker.io/bitnami/spark:3.4.0-debian-11-r1),使用spark-submit以cluster模式提交Spark Pi应用时,应用pod启动失败,核心报错为java.net.UnknownHostException: spark-master,无法连接spark-master:7077。
排查步骤
1. 确认Spark Master服务的可访问性
- 检查
hm-spark命名空间下Spark Master服务状态:
确认输出中存在kubectl get svc -n hm-sparkspark-master服务,且端口映射包含7077(对应Spark Standalone的通信端口)。 - 在同命名空间内测试DNS解析:
若解析失败,说明Kubernetes集群DNS(如CoreDNS)存在异常,需检查DNS组件的pod状态及配置。kubectl run -it --rm --image=busybox:1.36 test-dns -n hm-spark -- nslookup spark-master
2. 修正spark-submit的关键配置
- 确保应用部署在正确命名空间:
提交命令必须添加--conf spark.kubernetes.namespace=hm-spark,让Spark Pi pod部署在hm-spark命名空间内,才能直接解析同命名空间的spark-master服务。 - 确认master参数的正确性:
使用Kubernetes cluster模式时,master参数应为k8s://https://127.0.0.1:6443,不能写成spark://spark-master:7077(后者是Spark Standalone模式的master地址),避免应用错误尝试连接Standalone集群。
3. 验证Bitnami Chart的部署配置
- 检查Helm部署的values配置:
确认Spark Master的服务名称未被自定义修改,若服务名称不是helm get values spark -n hm-sparkspark-master,需同步更新应用中的连接目标。 - 确认Spark Master端口暴露状态:
确保kubectl describe pod spark-master-0 -n hm-spark | grep Ports7077端口处于监听状态,且服务已正确关联该端口。
4. 检查应用pod的DNS配置
- 查看Spark Pi pod的DNS相关配置:
确认kubectl describe pod <spark-pi-pod-name> -n hm-spark | grep -A5 DNSdnsPolicy为ClusterFirst,无自定义DNS配置干扰集群DNS解析。
总结
最常见的问题根源是:
- Spark Pi pod部署在非
hm-spark命名空间,导致无法解析同命名空间的spark-master服务; spark-submit错误指定了Spark Standalone模式的master地址,而非Kubernetes集群地址。
优先排查这两点,即可解决大部分此类连接问题。
内容的提问来源于stack exchange,提问作者Hongbo Miao
相关产品推荐
相关产品推荐

