Я пытаюсь развернуть задание Spark в кластере Kubernetes (работает на AWS EKS). Я развертываю модуль, который выполняет отправку искр в клиентском режиме. Модуль становится модулем драйвера, а затем начинает запускать модули исполнителя. Модули исполнителей пытаются подключиться к драйверу, но терпят неудачу, что приводит к ошибке sh. Вот сообщение об ошибке из журнала исполнителя:
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-network ). Сервис предоставляет драйверу DNS-имя data-loom-stats. Судя по сообщению об ошибке, разрешение DNS работает, так как оно правильно переводит его на 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, привязанный к 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, или это вызвано чем-то в конфигурации искры?
Я могу предоставить больше, чтобы помочь идентифицировать root причину.