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.График примерно делится на 2 раздела:
Во-первых: от старта до ReduceByKey: загрузка процессора высокая, активность сети отсутствуетВторое: после reduByKey: ЦП понижается, сетевой ввод / вывод завершен.Как видно из графика, (1) может использовать столько мощности процессора, сколько было указано. Таким образом, это может быть не проблема количества потоков.
Как объяснить этот результат?