Я тестирую использование Docker для выполнения алгоритмов Spark на MESOS. Мне удалось запустить Spark в клиентском режиме с исполнителями внутри Docker, но я хотел пойти дальше и также запустить мой драйвер в контейнере Docker. Здесь я столкнулся с поведением, которое я не уверен, что это нормально, позвольте мне попытаться объяснить.
Я отправляю свое искровое приложение через MesosClusterDispatcher, используя такую команду, как:
$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master mesos://spark-master-1:7077 --deploy-mode cluster --conf spark.mesos.executor.docker.image=myuser/myimage:0.0.2 https://storage.googleapis.com/some-bucket/spark-examples-1.5.2-hadoop2.6.0.jar 10
Мой драйвер работает нормально внутри своего контейнера докеров, но исполнители терпят неудачу:
"sh: /some/spark/home/bin/spark-class: No such file or directory"
Глядя на журнал ведомых устройств MESOS, я думаю, что исполнители не работают внутри докера: "docker.cpp:775] No container info found, skipping launch
". Поскольку на моих подчиненных устройствах Mesos не установлена искра, она не работает.
Кажется, что конфиг искры, которую я дал в первом искровом представлении, не передается в предоставленный драйвером conf при запуске в контейнере докера. Единственный обходной путь, который я нашел, - это изменить мой образ Docker, чтобы определить внутри его spark conf свойство spark.mesos.executor.docker.image
. Таким образом, мои исполнители хорошо получают конфиг и запускаются внутри докера на Mesos. Мне это кажется немного сложным, и я чувствую, что конфигурация, переданная в раннюю отправку искры, должна быть передана в отправку драйвера ...
Итак, мои вопросы:
- Я делаю что-то неправильно?
- Есть ли лучшее решение для передачи конфигурации искры от мезо-диспетчера к исполнителю через драйвер?