Адаптивный план Spark: как обработка меняется по ходу работы

Что такое адаптивное выполнение в Spark, какие сведения система получает во время обработки и почему это не исправляет любую медленную задачу.

Маршрут обработки меняет направление у группы неравных блоков и делится на потоки.

Почему план заранее бывает неточным

Перед обработкой большого набора система строит план: какие части данных читать, как распределить работу и каким способом соединить результаты. Это похоже на план доставки посылок по городу. Пока машины не вышли на маршрут, можно опираться только на карту и прошлые наблюдения. Фактическая загрузка дорог становится известна позже.

В Spark похожая неопределённость возникает из-за объёма промежуточных данных. Две таблицы могут оказаться меньше или больше ожидаемого, а один раздел данных — заметно тяжелее соседних. Первоначальный план остаётся обоснованной оценкой, но после начала работы появляются более точные сведения.

Что Spark узнаёт во время работы

Адаптивное выполнение использует статистику уже полученных промежуточных результатов и может пересмотреть оставшиеся действия. Документация Apache Spark описывает, в частности, объединение слишком маленьких разделов, работу с перекошенными разделами и изменение стратегии соединения наборов. Это происходит во время выполнения, а не до появления фактических данных.

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

Условный пример перегруженной части

Представим условную сеть магазинов. Данные о продажах распределили между несколькими исполнителями. Большинство обрабатывают сопоставимые порции, но записи одного популярного товара попали в одну огромную порцию. Остальные исполнители закончили, а общий результат ждёт последнего. Это называют перекосом нагрузки.

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

Возможности и ограничения

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

Однако включённый адаптивный механизм не означает, что можно перестать следить за качеством схемы и распределением данных. Не всякая операция допускает полезный пересмотр посреди работы. Кроме того, итоговое время включает чтение, передачу и запись данных; улучшение одного участка не обязано заметно ускорить весь процесс.

Когда наблюдать фактический план

Если задача стала медленной, сравните первоначальное предположение с тем, что система увидела по ходу выполнения. Посмотрите, не осталось ли одной долгой части после остальных, не пересылались ли чрезмерные объёмы данных и какой план применился фактически. Это исследование конкретного запуска, а не вывод из одного переключателя в настройках.

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

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

По теме

Следующий шаг

Если хотите глубже понимать распределённую обработку, изучите программу курса «PySpark для инженеров и аналитиков данных». Сопоставьте темы курса с вашим опытом работы с таблицами и задачами команды.

PySpark для инженеров и аналитиков данных
Курс
Доступ сразу
PySpark для инженеров и аналитиков данных

Разработчик PySpark — это инженер, который обрабатывает большие объемы данных с помощью распределённых вычислений и строит масштабируемые системы обработки данных.

С нуля до junior
Теория и практика
Диплом по окончании
12 990
₽/мес
УЗНАТЬ ПОДРОБНЕЕ

Источники

Читайте также

Обучить команду или нанять специалиста по данным: как выбрать
47

Обучить команду или нанять специалиста по данным: как выбрать

Как руководителю определить, какие навыки развивать внутри команды, когда нужна новая роль и почему обучение и найм часто дополняют друг друга.
Вертикальное и горизонтальное масштабирование данных: в чём разница
46

Вертикальное и горизонтальное масштабирование данных: в чём разница

Когда системе добавляют мощность одного сервера, когда делят работу между несколькими и почему увеличение ресурсов само по себе не решает любую проблему.
Журнал изменений данных: как выяснить, кто и когда изменил набор
42

Журнал изменений данных: как выяснить, кто и когда изменил набор

Что можно узнать из журнала действий с данными, как он помогает разбирать ошибки и почему его записи не показывают всю историю сами по себе.

Занятия проходят
в Нова Дата СДО

Вебинары, практика и общение с преподавателем — в одном окне браузера.

Посмотреть интерфейс платформы
Календарь обучения в Нова Дата СДО
Курсы студента в Нова Дата СДО
Редактор кода для практики в Нова Дата СДО
Вебинары и расписание Ваши курсы Код в браузере
Нова Дата СДО — в реестре российского ПОРеестровая запись № 34931
Заявка отправлена
Отправим вам подборку курсов в течение 5 минут. С вами также свяжется наш специалист и даст карьерную консультацию.
Персональный промокод
На курс «Инженер по парсингу данных»
Введите код при оплате, чтобы применить скидку к программе.