Как параметр SPARK_WORKER_CORES влияет на параллелизм в Spark Standalone

Я использую кластер Spark 2.2.0, настроенный в автономном режиме. Кластер имеет 2 восьмиъядерных компьютера. Этот кластер предназначен исключительно для заданий Spark, и ни один другой процесс их не использует. У меня есть около 8 приложений Spark Streaming, которые работают в этом кластере.
Я явно установил для SPARK_WORKER_CORES (в spark-env.sh) значение 8 и выделил по одному ядру для каждого приложения с помощью параметра total-executor-cores. Эта конфигурация снижает возможность параллельной работы над несколькими задачами. Если этап работает на разделенном RDD с 200 разделами, одновременно выполняется только одна задача. Я хотел, чтобы Spark запускал отдельный поток для каждого задания и обрабатывал его параллельно. Но я не смог найти отдельную настройку Spark для управления количеством потоков.
Поэтому я решил поиграть и увеличил количество ядер (например, SPARK_WORKER_CORES в spark-env.sh) до 1000 на каждой машине. Затем я дал по 100 ядер каждому приложению Spark. Я обнаружил, что на этот раз Spark начал параллельную обработку 100 разделов, указывая на то, что используется 100 потоков.
Я не уверен, что это правильный метод воздействия на количество потоков, используемых заданием Spark.


person scorpio    schedule 29.01.2018    source источник


Ответы (1)


Вы перепутали две вещи:

  • Свойства менеджера кластера - SPARK_WORKER_CORES - общее количество ядер, которое может предложить воркер. Используйте его для управления долей ресурсов, которые должны использоваться Spark в целом.
  • Свойства приложения --total-executor-cores/spark.cores.max — количество ядер, которые приложение запрашивает у менеджера кластера. Используйте его для управления параллелизмом в приложении.

Только второй напрямую отвечает за параллелизм приложений, если первый не ограничивает.

Также CORE в Spark является синонимом потока. Если ты:

выделите одно ядро ​​для каждого приложения, используя параметр total-executor-cores.

затем вы специально назначаете один поток обработки данных.

person Alper t. Turker    schedule 29.01.2018
comment
Да, я понимаю, что это две разные вещи, но они работают рука об руку, как вы также указали в своем ответе: total_executor_cores должен быть меньше, чем SPARK_WORKER_CORES. Но эта строка отвечает на мой вопрос: CORE в Spark — это синоним thread - person scorpio; 29.01.2018