Как стать автором
Поиск
Написать публикацию
Обновить

Оптимизация Spark-приложений: шаг за шагом от базовых техник до продвинутых приёмов

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров4.7K
Всего голосов 31: ↑31 и ↓0+36
Комментарии3

Комментарии 3

@SacredDiablo, спасибо за статью! Показалось, что не раскрыты понятия "Гибкое определение" и "предрасчет".

Как я понял, Гибкое определение + repartition это об этом:

// Получение списка файлов и определение конфигурации
// Определение объема данных
val perfectBlockSize = 256 * 1024 * 1024
val repartitionCount = tableSize / perfectBlockSize

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

Привет!

Да, это действительно не вошло в статью - слишком много кода в статье начинают путать =) Подробнее есть в коде на git (ссылка есть в статье, но я только сейчас понял, что она сливается с текстом) - https://github.com/SacredDiabloPub/highload2024/blob/master/src/main/scala/GroupFunction.scala

Гибкое определение (которое дальше уже называется автоопределение, т.к. появилась функция. которая позволяет определять размеры блоков) - это когда в начале каждого расчёта мы смотрим на объём данных, который у нас будет и исходя из этого задаём конфигурацию для spark. В случае с предрасчётом - мы во время тестов смотрим данные, с помощью той же функции определяем подходящие параметры, усредняем их и хардкодим.

Вся разница между гибким определением и гибким определением + repartition в том, что мы дополнительно заставляем данные перемешаться, что вызывает накладные расходы на перемещение между экзекьюторами. Это может быть полезно в определённых ситуациях - но чаще всего достаточно правильно подобрать размеры блоков для чтения.

Спасибо за ответ!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий