На разумно оборудованном 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 соответственно), но возникает та же проблема.
Хммм.Ну, я буду продолжать расследование (пора спать).=:)
Заранее благодарим вас за ваш вклад и идеи.