Apache Spark: ядра против исполнителей - PullRequest
0 голосов
/ 26 июня 2019

Вопросы, связанные с ядрами и исполнителями, задаются несколько раз в SO.

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

Для каждогодело другое, я снова задаю похожий вопрос.

У меня запущено приложение с интенсивным использованием процессора с одинаковым количеством ядер с разными исполнителями.Ниже приведены наблюдения.

Диспетчер ресурсов: Kubernetes

Случай 1: Исполнителей - 6, Количество ядер для каждого исполнителя -2, ИсполнительПамять - 3g, Объем обработки данных ~ 10 ГБ, Разделы -36, Продолжительность работы: 75 минут

Случай 2: Исполнителей - 4, Количество ядер для каждогоexecutor -3, память исполнителя - 3g, объем обработки данных ~ 10 ГБ, разделы -36, продолжительность задания: 101 мин.

. По приведенной выше ссылке, менее 5 ядер на исполнителяхорошо для операций ввода-вывода.

В обоих моих случаях ядра одинаковы (12), однако оба задания занимали разное время.Есть мысли?

Обновлено

Случай 3: Исполнителей - 12, Количество ядер для каждого исполнителя -1, Память исполнителя - 3g, Количествообработки данных ~ 10 ГБ, разделы -36, длительность задания: 81 мин

Ответы [ 2 ]

1 голос
/ 27 июня 2019

В первом случае у вас на 50% больше памяти для работы (3g * 6 = 18g), при этом меньше проблем с блокировкой (2 ядра / исполнитель вместо 3).Попробуйте динамическое размещение с 1core / executor и посмотрите, что произойдет

1 голос
/ 26 июня 2019

Есть много возможных решений, Прежде всего, не все узлы рождаются одинаковыми, это может быть одним из заданий, которым не повезло, и они получили медленный узел. Секунды, если вы выполняете случайные операции с большим количеством узлов, но с той же вычислительной мощностью, это действительно замедлит вашу работу В конце концов, в случайном порядке вся ваша информация будет в конечном итоге сохранена на одном узле. Наличие этого узла с меньшим количеством данных перед рукой и меньшей мощностью замедлит работу. Но я подозреваю, что даже без операций тасования большее количество узлов будет немного медленнее, поскольку существует большая вероятность того, что один узел получит больше работы от других узлов.

Пояснение:

Допустим, у меня один узел, 10 часов работы и 10 ядер, поэтому я знаю, что это займет 1 час. но если у меня есть 2 узла с 5 ядрами в каждом и, скажем, набор данных был разделен таким образом, что один узел имеет 5,5 часов работы, а другие 4,5 часа, продолжительность задания составит 1,1 часа.

За распределенные вычисления всегда приходится платить накладные расходы. поэтому обычно быстрее работать с одними и теми же ресурсами на одной машине.

Надеюсь, то, что я пытался сказать, понятно.

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