Apache Spark: количество ядер против количества исполнителей

Я пытаюсь понять взаимосвязь количества ядер и числа исполнителей при запуске задания Spark на YARN.

Тестовая среда выглядит следующим образом:

Количество узлов данных: 3Спецификация машины узла данных:Процессор: Core i7-4790 (количество ядер: 4, количество потоков: 8)Оперативная память: 32 ГБ (8 ГБ х 4)HDD: 8 ТБ (2 ТБ х 4)

Сеть: 1 Гб

Версия Spark: 1.0.0

Версия Hadoop: 2.4.0 (Hortonworks HDP 2.1)

Поток заданий Spark: sc.textFile -> filter -> map -> filter -> mapToPair -> lowerByKey -> map -> saveAsTextFile

Входные данные

Тип: один текстовый файлРазмер: 165 ГБКоличество строк: 454 568 833

Выход

Количество строк после второго фильтра: 310 640 717Количество строк в файле результатов: 99,848,268Размер файла результата: 41 ГБ

Задание было запущено со следующими конфигурациями:

--master yarn-client --executor-memory 19G --executor-cores 7 --num-executors 3 (исполнители на узел данных, используйте столько же, сколько ядер)

--master yarn-client --executor-memory 19G --executor-cores 4 --num-executors 3 (количество ядер уменьшено)

--master yarn-client --executor-memory 4G --executor-cores 2 --num-executors 12 (меньше ядра, больше исполнителя)

Истекшие времена:

50 мин 15 сек

55 мин 48 сек

31 мин 23 сек

К моему удивлению, (3) было намного быстрее.
Я думал, что (1) будет быстрее, так как при перетасовке будет меньше общения между исполнителями.
Хотя количество ядер в (1) меньше, чем (3), количество ядер не является ключевым фактором, так как 2) работает хорошо.

(Подписки добавлены после ответа pwilmot.)

Для информации, снимок экрана монитора производительности выглядит следующим образом:

Сводка узла данных Ganglia для (1) - задание началось в 04:37.

Сводка узла данных Ganglia для (3) - задание началось в 19:47. Пожалуйста, игнорируйте график до этого времени.

График примерно делится на 2 раздела:

Во-первых: от старта до ReduceByKey: загрузка процессора высокая, активность сети отсутствуетВторое: после reduByKey: ЦП понижается, сетевой ввод / вывод завершен.

Как видно из графика, (1) может использовать столько мощности процессора, сколько было указано. Таким образом, это может быть не проблема количества потоков.

Как объяснить этот результат?

Ответы на вопрос(8)

Ваш ответ на вопрос