Kubernetes连接中的Spark被拒绝

时间:2020-05-29 23:54:50

标签: apache-spark kubernetes

我试图在Kubernetes集群中部署Spark作业(在AWS EKS上运行)。我部署了一个在客户端模式下执行spark-submit的pod。该吊舱成为驱动程序吊舱,然后开始启动执行程序吊舱。执行程序吊舱尝试连接到驱动程序,但失败导致执行程序崩溃。这是执行程序日志中的错误消息:

Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: data-loom-stats/10.135.131.239:9902
Caused by: java.net.ConnectException: Connection refused

通过无头的Kubernetes服务(根据Spark的建议:https://spark.apache.org/docs/latest/running-on-kubernetes.html#client-mode-networking)暴露了驾驶员吊舱。该服务使用DNS名称data-loom-stats向驱动程序公开。根据错误消息,DNS解析似乎正在正常工作,因为它已将其正确转换为Pod IP地址10.135.131.239。要查看驱动程序端发生了什么,我在正在运行的驱动程序容器中打开了一个外壳,并能够对监听端口进行netstat:

[root@data-loom-stats-7496b69994-9t8zs work-dir]# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:4040 0.0.0.0:* LISTEN 673/java
tcp 0 0 127.0.0.1:40077 0.0.0.0:* LISTEN 673/java
tcp 0 0 127.0.0.1:9902 0.0.0.0:* LISTEN 673/java
tcp 0 0 0.0.0.0:41267 0.0.0.0:* LISTEN 673/java

如您所见,端口9902已绑定到回送IP地址。端口4040是Spark UI,绑定到0.0.0.0。由于执行程序吊舱不稳定,因此我从另一个吊舱进行了一些测试。我能够卷曲端口4040:

/merida/src # curl -v http://10.135.131.239:4040
* Trying 10.135.131.239:4040...
* TCP_NODELAY set
* Connected to 10.135.131.239 (10.135.131.239) port 4040 (#0)
> GET / HTTP/1.1
> Host: 10.135.131.239:4040
> User-Agent: curl/7.67.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 Found
< Date: Fri, 29 May 2020 22:50:46 GMT
< Location: http://10.135.131.239:4040/jobs/
< Content-Length: 0
< Server: Jetty(9.3.z-SNAPSHOT)
<
* Connection #0 to host 10.135.131.239 left intact

但是尝试连接到端口9902会导致连接被拒绝错误,就像驱动程序日志一样。

/merida/src # curl -v http://10.135.131.239:9902
* Trying 10.135.131.239:9902...
* TCP_NODELAY set
* connect to 10.135.131.239 port 9902 failed: Connection refused
* Failed to connect to 10.135.131.239 port 9902: Connection refused
* Closing connection 0
curl: (7) Failed to connect to 10.135.131.239 port 9902: Connection refused

因此,似乎我的地址/端口绑定需要固定。这个结论正确吗?如果是这样,这是我可以在k8s清单中修复的问题,还是由spark配置中的某些问题引起的?

我可以提供更多帮助来确定根本原因。

0 个答案:

没有答案
相关问题