SPARK 2.4 Standalone + Multiple Workers на одном многоядерном сервере; Заявки ожидают ресурсов

На достаточно оборудованном 64-разрядном сервере Fedora (домашнем) с 12-Cores и 64gb-RAM у меня есть Spark 2.4, работающий в режиме Standalone со следующей конфигурацией в ./spark-env.sh (где не показаны элементы в этом файле, которые у меня есть оставил закомментировано):

# =====================================================================
# Options for the daemons used in the standalone deploy mode
# =====================================================================
export SPARK_MASTER_HOST=dstorm
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8080 # JupyterLab uses port 8888.
# ---------------------------------------------------------------------
export SPARK_WORKER_CORES=3     # 12  # To Set number of worker cores to use on this machine.
export SPARK_WORKER_MEMORY=4g         # Total RAM workers have to give executors (e.g. 2g)
export SPARK_WORKER_WEBUI_PORT=8081   # Default: 8081
export SPARK_WORKER_INSTANCES=4 # 5   # Number of workers on this server.
# ---------------------------------------------------------------------
export SPARK_DAEMON_MEMORY=1g      # To allocate to MASTER, WORKER and HISTORY daemons themselves (Def: 1g).
# =====================================================================

# =====================================================================
# Generic options for the daemons used in the standalone deploy mode
# =====================================================================
export SPARK_PID_DIR=${SPARK_HOME}/pid # PID file location.
# =====================================================================

После запуска Spark MASTER и WORKERS в этой конфигурации я запускаю Jupyter всего с двумя вкладками Notebook, которые указывают на этот автономный кластер Spark.

Моя проблема в том, что только одна вкладка Notebook с ячейками - примерно 5-я или 6-я ячейка - потребляет все ядра; оставляя вторую вкладку голодной, останавливая весь прогресс на этой второй вкладке, поскольку она ожидает (но никогда не получает) ресурсов. Я могу подтвердить это в SparkUI: статус RUNNING для первой вкладки Notebook с всеми ядрами; и статус ОЖИДАНИЕ для второй вкладки с 0-Cores. И это несмотря на то, что первый Блокнот завершил свой прогон (т.е. достиг дна и завершил свою последнюю ячейку).

Кстати, это ожидание не ограничивается Jupyter. Если я в следующий раз запущу Python/PySpark в CLI и подключусь к тому же кластеру, ему тоже придется подождать.

Во всех трех случаях я получаю session вот так:

spark_sesn = SparkSession.builder.config(conf = spark_conf).getOrCreate()

Обратите внимание, что на этих вкладках записной книжки или в интерфейсе командной строки не происходит ничего сложного. Наоборот, он супер легкий (просто для пробы).

Я что-то неправильно настроил или у меня неправильная основная концепция распределения? Я думал, что здесь должно быть мультиплексирование, а не блокирование. Возможно, это проблема с совместным использованием сеанса? (т.е. .getOrCreate()).

Я пробовал играть с комбинацией CORES + WORKER-INSTANCES (например, 12 x 5 соответственно), но возникает та же проблема.

Хм. Что ж, я продолжу расследование (пора спать). знак равно

Заранее благодарим вас за ваш вклад и идеи.


person NYCeyes    schedule 21.12.2018    source источник


Ответы (1)


Вы запустили сервис перемешивания? Если нет, то нужно сделать так:

$SPARK_HOME_DIR/sbin/start-shuffle-service.sh

Затем вам нужно включить dynamicAllocation и указать вашему sparkSession, что служба перемешивания включена.

Для этого объявите его в SparkConf() :

spark.dynamicAllocation.enabled = true
spark.shuffle.service.enabled = true

Посмотрите: https://spark.apache.org/docs/latest/configuration.html#dynamic-allocation

После того, как вы подождете «spark.dynamicAllocation.executorIdleTimeout», исполнители будут удалены. Вы можете увидеть это в пользовательском интерфейсе Standalone Master и пользовательском интерфейсе приложения Spark.

Еще одна хорошая ссылка: https://dzone.com/articles/spark-dynamic-allocation

person V. Jarry    schedule 13.03.2019
comment
Привет и добро пожаловать в StackOverflow! Это хороший ответ. Я не знал о shuffle service. Когда у меня будет минутка, я попробую ваши инструкции и вернусь сюда. Спасибо за предложение! - person NYCeyes; 13.03.2019