Раздел Spark Shuffle - если у меня будет раздел Shuffle с меньшим количеством ядер, что произойдет? - PullRequest
0 голосов
/ 08 февраля 2020

Я использую блоки данных с Azure, поэтому у меня нет способа указать количество исполнителей и память на исполнителей.

Давайте рассмотрим следующую конфигурацию.

  1. 10 рабочих узлов, каждый с 4 ядрами и 10 ГБ памяти.
  2. это автономная конфигурация
  3. размер входного чтения составляет 100 ГБ

теперь, если я установлю свой раздел в случайном порядке на 10 (меньше, чем общее количество ядер, 40). Что случилось бы?

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

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

Если вы не используете dynamic allocation, вы в конечном итоге оставите большинство ядер неиспользованными во время выполнения. Представьте, что у вас есть 40 «слотов» для вычислений, но только 10 задач для обработки, поэтому 30 «слотов» будут пустыми (просто простаивающими).

Я должен добавить, что вышеизложенное очень упрощенная ситуация. В действительности у вас может быть несколько этапов, работающих параллельно, поэтому, в зависимости от вашего запроса, вы все равно будете использовать все 40 ядер (см., Например, Параллельно ли выполняются этапы в приложении в spark? )

Обратите внимание также, что spark.sql.shuffle.partitions не единственный параметр, который определяет количество задач / разделов. Вы можете иметь различное количество разделов для

  • чтения файлов
  • , если вы измените свой запрос с помощью repartition, например, при использовании:

    df
     .repartition(100,$"key")
     .groupBy($"key").count
    

ваше значение spark.sql.shuffle.partitions=10 будет перезаписано на 100 на этом шаге обмена

0 голосов
/ 08 февраля 2020

То, что вы описываете как ожидание, называется динамическим c выделением на Spark. Вы можете указать минимальное и максимальное распределение, а затем, в зависимости от количества разделов, структура будет масштабирована. https://spark.apache.org/docs/latest/configuration.html#dynamic -allocation

Но только с 10 разделами в файле объемом 100 ГБ у вас будет outOfMemoryErrors

...