Я пытаюсь понять взаимосвязь количества ядер и числа исполнителей при запуске задания Spark в YARN.
Условия тестирования следующие:
- Количество узлов данных: 3
- Данные node спецификация машины:
- CPU: Core i7-4790 (# из ядер: 4, # из потоков: 8)
- Оперативная память: 32 ГБ (8 ГБ x 4)
- HDD: 8TB (2TB x 4)
-
Сеть: 1Gb
-
Исправленная версия: 1.0.0
-
Версия Hadoop: 2.4.0 (Hortonworks HDP 2.1)
-
Исходный поток задач: sc.textFile → filter → map → filter → mapToPair → reduceByKey → 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
(исполнители на данные node, используйте столько же, сколько ядра) -
--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 node резюме для (1) - задание начато в 04:37.
- Данные Ganglia node резюме для (3) - работа началась в 19:47. Пожалуйста, проигнорируйте график до этого времени.
Граф грубо делит на 2 секции:
- Сначала: от начала до reduceByKey: интенсивность процессора, отсутствие активности в сети.
- Во-вторых: после reduceByKey: CPU опускается, сетевой ввод-вывод завершен.
Как показывает график, (1) может использовать как можно больше мощности ЦП. Таким образом, это может быть не проблема количества потоков.
Как объяснить этот результат?