Spark Agent在Kubernetes EKS中无法连接外部Shuffle服务求助
解决Kubernetes中Spark Agent连接外部Shuffle服务失败的问题
问题根源
你的配置参数缺少spark.前缀,导致Spark无法识别动态分配和外部Shuffle服务的相关配置项,进而仍尝试连接Executor所在节点的本地Shuffle服务(即日志中的10.0.8.56这类节点IP),而非你部署的DaemonSet+Service提供的外部Shuffle服务。
修正步骤
补全配置参数的
spark.前缀
所有Spark配置参数必须以spark.开头,修改后的正确配置如下:spark.dynamicAllocation.enabled=true spark.shuffle.service.enabled=true spark.kubernetes.shuffle.namespace = "default" spark.kubernetes.shuffle.service.labels = "app=spark-external-shuffle" spark.dynamicAllocation.initialExecutors=1 spark.dynamicAllocation.minExecutors=1 spark.dynamicAllocation.maxExecutors=5验证配置匹配性
- 确认外部Shuffle服务的DaemonSet Pod标签确实为
app=spark-external-shuffle,可通过以下命令验证:kubectl get pods -l app=spark-external-shuffle - 检查Service的选择器是否与Pod标签一致:
输出需包含kubectl describe service spark-external-shuffle | grep Selectorapp=spark-external-shuffle。
- 确认外部Shuffle服务的DaemonSet Pod标签确实为
重启应用并验证
重启Spark Agent后,查看Driver日志,确认日志中出现连接到Shuffle Service ClusterIP(172.20.185.71)的相关信息,而非节点IP。
额外排查点
如果问题仍存在:
- 检查Driver容器是否能访问Shuffle Service的ClusterIP:7337,可在Driver容器内执行
telnet 172.20.185.71 7337或nc -zv 172.20.185.71 7337测试连通性。 - 确认Shuffle Service的DaemonSet Pod已在所有运行Executor的节点上正常启动,可通过以下命令查看Pod分布:
kubectl get daemonset spark-external-shuffle
内容的提问来源于stack exchange,提问作者Dennis Ruiz
相关产品推荐
相关产品推荐

