У меня проблема с точки зрения смещения рабочей нагрузки искры.
Настройка Env
Кластер имеет 5 узлов, одного мастера и 5 рабочих (ниже 10.200.0.94 ~ 10.200.0.98
).
Каждый узел имеет 40 ядер (сHyperthreading) и 256g памяти.
Настройка задания Spark
- num-executors 5
- executor-core 5
- Память драйвера 16g
- Память исполнителя 20g
Задача состоит в том, чтобы вычислить записи аномалий среди миллионов записей.
Вот история задания после запуска заданияпочти 2 ~ 3 часа.
Как мы видим, в основном это 6 стадий, большую часть времени приходится на стадии 3, 4 и 5.
Давайте углубимся в этап 3 (этапы 4 и 5 имеют схожие результаты):
Очевидно, что некоторые задачи занимают гораздо больше времени, чем другие узлы, например, задачи, связанные с узлом, имеющим частный ip 10.200.0.96
.
Время GC кажется разумным.
Давайте теперь погрузимся в представление исполнителя:
Узел 96 и98 занимает гораздо больше времени на выполнение задачи, чем другие узлы.
Следует отметить, что я не использовал никаких действий repartition
.
Может кто-нибудь дать некоторые подсказки по этому поводу?Как я могу избежать такого смещения вычислений в работе Spark?Есть ли общие правила, которым нужно следовать?