Почему Spark иногда запускает несколько задач на ядро - PullRequest
0 голосов
/ 11 января 2019

Я выполняю свои задания на Spark 2.2 в кластере с Mesos через spark-submit. Я заявляю:

  • (в конфигурации sparkSession) spark.executor.cores 5
  • (В конфигурации config для отправки) total-executor-cores 20
  • (в конфиге spark submit) ядра драйверов 20

Итак, у меня 20 ядер на драйвере и 4 исполнителя по 5 ядер на каждом.

Обычно, когда я смотрю на индикатор выполнения этапа, например

[Stage 12:================================>                   (86 + 20) / 100]

, который указывает количество выполненных задач (86), количество запущенных задач (20) и общее количество задач (100). Также в большинстве случаев количество выполняемых задач не превышает значения, указанного в total-executor-cores, поэтому в данном случае 20.

Прямо сейчас, однако, у меня есть работа, где я вижу что-то вроде этого

[Stage 22:================================>                   (355 + 155) / 568]

Для те же настройки , что и выше, тот же кластер. В SparkUI я вижу по 5 ядер на исполнителя (по запросу), запускающего около 30 задач на исполнителя одновременно, где обычно выполняется не более 5 задач (по 1 на каждое ядро). Я не понимаю почему.

Может ли это быть связано с характером моей работы? Он включает приведение Spark DataFrame в RDD и сборку на драйвере. Пример этапа

val dfOnDriver = df.select("colA", "colB", "colC")
   .rdd
   .map(...)
   .collect
  • Вопрос 1 Почему выполняется так много задач?
  • Вопрос 2 Есть ли способ заставить такое поведение преднамеренно в обычных вычислениях на основе исполнителя?
  • Вопрос 3 Является ли этот тип поведения желательным и более эффективным, чем 1 задача на ядро?

Дайте мне знать, если вам нужна дополнительная информация о моей настройке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...