Решение проблем с приложением 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