Shuffle в Spark: зачем данные перемещаются между узлами

Зачем Spark перегруппировывает данные, почему сетевой обмен занимает время и какие вопросы задать перед оптимизацией распределённого расчёта.

Кубики перегруппировываются между графитовыми лотками по оранжевым желобам

Когда локального подсчёта недостаточно

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

Системе требуется согласованно перегруппировать данные или промежуточные результаты. Такое перераспределение в Spark называют shuffle, по-русски — перетасовкой. Это не случайное перемешивание: цель состоит в том, чтобы нужные для следующего вычисления данные оказались вместе. Часть работы при этом может требовать обмена между компьютерами.

Как представить перетасовку без программирования

Вообразите три стола с карточками заказов. На каждом лежат карточки Москвы, Казани и Перми. Если каждому столу поручить один город, карточки придётся рассортировать и передать соседям. После передачи исполнители смогут работать с нужными группами, но сама сортировка и доставка тоже заняли время.

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

Почему shuffle может быть дорогим

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

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

Перетасовка не всегда означает ошибку

Объединение сведений и подсчёт по группам часто требуют нового расположения данных. Сам факт shuffle не говорит, что программа устроена плохо. Желание убрать любой обмен может привести к более сложному решению или даже изменить смысл результата. Сначала уточните, какую необходимую работу выполняет этот этап.

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

Не путайте обмен с перекосом

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

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

Как обсуждать оптимизацию с командой

Выберите один повторяемый сценарий и сохраните исходный результат. Выясните, на каком этапе начинается обмен, сколько сведений передаётся и одинаково ли быстро заканчивают исполнители. Затем меняйте одну существенную часть и сравнивайте полное время работы, а не отдельный удобный показатель.

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

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

Обучение в NovaData

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

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

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

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

Источники

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

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

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

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

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

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

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

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

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

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

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