SPARK 2.4 Standalone + несколько рабочих на одном многоядерном сервере;Материалы ждут ресурсов - PullRequest
0 голосов
/ 21 декабря 2018

На разумно оборудованном 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 , используя только две вкладки «Блокнот», которые указывают на этот автономный кластер Spark.

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

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

Во всех трех случаях я получаю session, например:

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

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

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

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

Хммм.Ну, я буду продолжать расследование (пора спать).=:)

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

1 Ответ

0 голосов
/ 13 марта 2019

Вы начали обслуживание в случайном порядке?Если нет, вам нужно сделать это следующим образом:

$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» времени, исполнители будут удалены.Вы можете видеть это в автономном интерфейсе Master и в приложении Spark.

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

...