Контейнер Docker с Apache Spark в автономном режиме кластера

Я пытаюсь создать образ докера, содержащий Apache Spark. IT построен на официальном образе openjdk-8-jre.

Цель состоит в том, чтобы запустить Spark в кластерном режиме, таким образом, имея по крайней мере один главный (запущенный через sbin/start-master.sh) и один или несколько подчиненных (sbin/start-slave.sh). См. spark-standalone-docker для моего файла Dockerfile и сценария точки входа.

Сама сборка на самом деле проходит, проблема в том, что когда я хочу запустить контейнер, он запускается и вскоре после этого останавливается. Причина в том, что сценарий запуска мастера Spark запускает мастер в режиме демона и завершает работу. Таким образом, контейнер завершает работу, так как на переднем плане больше нет процессов.

Очевидное решение — запустить главный процесс Spark на переднем плане, но я не мог понять, как это сделать (гугл тоже ничего не выдал). Мое «обходное решение» — запустить tails -f в каталоге журнала Spark.

Таким образом, мои вопросы:

  1. Как запустить Apache Spark Master на переднем плане?
  2. Если первое невозможно/выполнимо/независимо, какое решение является предпочтительным (т.е. передовым) для поддержания контейнера «живым» (я действительно не хочу использовать бесконечный цикл и команду сна)?

person akoeltringer    schedule 23.09.2016    source источник


Ответы (2)


Как запустить Apache Spark Master на переднем плане?

Вы можете использовать spark-class с Master.

bin/spark-class org.apache.spark.deploy.master.Master

и то же самое для рабочих:

bin/spark-class org.apache.spark.deploy.worker.Worker $MASTER_URL

Если вы ищете готовое к работе решение, вам следует рассмотреть возможность использования надлежащего супервизора, такого как dumb-init или < a href="https://github.com/krallin/tini" rel="nofollow noreferrer">tini.

person zero323    schedule 24.09.2016
comment
Работает как шарм, большое спасибо! Что касается супервизора: я намерен запускать мастер и ведомый (-е) как отдельные контейнеры. Основная причина использования супервизора, которую я обнаружил, — это запуск нескольких демонов внутри одного контейнера. Есть еще один, о котором я не знаю? - person akoeltringer; 25.09.2016
comment
Здесь нет однозначного указания делать или не делать, но есть некоторое обоснование того, почему вы можете захотеть увидеть engineeringblog.yelp.com/2016/01/ - person zero323; 25.09.2016

ОБНОВЛЕННЫЙ ОТВЕТ (для искры 2.4.0):

Чтобы запустить мастер искры на переднем плане, просто установите переменную ENV SPARK_NO_DAEMONIZE=true в вашей среде перед запуском ./start-master.sh

и вы можете идти.

для получения дополнительной информации проверьте $SPARK_HOME/sbin/spark-daemon.sh

# Runs a Spark command as a daemon.
#
# Environment Variables
#
#   SPARK_CONF_DIR  Alternate conf dir. Default is ${SPARK_HOME}/conf.
#   SPARK_LOG_DIR   Where log files are stored. ${SPARK_HOME}/logs by default.
#   SPARK_MASTER    host:path where spark code should be rsync'd from
#   SPARK_PID_DIR   The pid files are stored. /tmp by default.
#   SPARK_IDENT_STRING   A string representing this instance of spark. $USER by default
#   SPARK_NICENESS The scheduling priority for daemons. Defaults to 0.
#   SPARK_NO_DAEMONIZE   If set, will run the proposed command in the foreground. It will not output a PID file.
##
person dsncode    schedule 31.12.2018
comment
На самом деле это очень полезно при использовании скрипта ./start-master.sh внутри контейнерной среды (т. е. при докеризации искры). В моем случае Kubernetes всегда сообщал о сбое контейнера (потому что spark запускался как сервис-демон). Однако с этой переменной окружения внутри контейнера Docker все работает отлично! - person bajro; 09.05.2019
comment
@Bajro У меня есть репозиторий gitlab, в котором реализовано решение для искрового докера. не стесняйтесь взглянуть и начать, если вам это нравится gitlab.com/dsncode/spark-docker - person dsncode; 09.05.2019
comment
Это официальный способ вывести процесс искры на передний план. См. официальный сайт Apache github.com/apache/spark/pull/15338. - person Ben; 24.05.2019