Решение проблем с приложением Apache Spark, запущенным в режиме клиента из контейнера Docker

Я пытаюсь подключиться к автономному кластеру Apache Spark из докеризированного приложения Apache Spark в режиме клиента.

Водитель сообщает Spark Master и Рабочим свой адрес. При запуске внутри контейнера докера он будет использовать some_docker_container_ip, Адрес докера не виден снаружи, поэтому приложение не будет работать.

Искра имеет spark.driver.host имущество. Это свойство передается мастеру и рабочим. Мой первоначальный инстинкт состоял в том, чтобы передать туда адрес хост-машины, чтобы кластер вместо нее обращался к видимой машине.

К сожалению spark.driver.host также используется для настройки сервера драйвером. Передача адреса хост-машины приведет к ошибкам запуска сервера, поскольку докер-контейнер не может связать порты под хостом хост-машины.

Это похоже на проигрышную ситуацию. Я не могу использовать ни адрес хост-машины, ни адрес контейнера докера.

В идеале я хотел бы иметь два свойства. spark.driver.host-to-bind-to используется для настройки сервера драйверов и spark.driver.host-for-master который будет использоваться мастером и рабочими. К сожалению, похоже, что я застрял только с одним свойством.

Другой подход будет использовать --net=host при запуске докера Этот подход имеет много недостатков (например, другие док-контейнеры не могут быть связаны с контейнером с --net=host и должен быть выставлен за пределами сети докер), и я хотел бы избежать этого.

Можно ли как-то решить проблему адресации драйверов, не открывая док-контейнеры?

1 ответ

Эта проблема исправлена ​​в https://github.com/apache/spark/pull/15120

Он будет частью релиза Apache Spark 2.1

Другие вопросы по тегам