Я выполняю свои задания на 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 задача на ядро?
Дайте мне знать, если вам нужна дополнительная информация о моей настройке.