Почему Spark ждёт одну задачу: перекос данных простыми словами

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

Четыре тележки с разным количеством оранжевых кубиков — образ перекоса нагрузки

Команда закончила, один участник ещё занят

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

Похожая ситуация встречается при обработке данных в Spark. Работа разбивается на части, однако объём и трудоёмкость этих частей могут сильно отличаться. Перекос данных, или data skew, помогает объяснить, почему задача затягивается даже тогда, когда значительная часть вычислительных ресурсов уже освободилась.

Как возникает неравномерность

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

Неравномерность встречается и у значений вроде «не указан», если слишком много записей попадают в одну такую категорию. Это повод изучить распределение, а не автоматически удалять неудобные строки. Данные могут вполне правильно описывать реальность. Задача инженера — сохранить смысл расчёта и понять, как выполнить его без ненужного ожидания.

Как заметить проблему

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

Другая возможная трудность — нехватка памяти для вычислений, из-за которой промежуточные данные переносятся на диск. В документации это называется spill. Эти явления могут встречаться рядом, но не означают одно и то же. Медленный этап также не доказывает, что причина обязательно в перекосе: нужно проверять наблюдения.

Подробнее: Databricks: признаки перекоса и переноса данных на диск.

Почему добавление компьютеров может не помочь

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

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

Что может сделать сам Spark

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

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

Подробнее: Apache Spark: адаптивное выполнение и оптимизация перекоса.

Как обсуждать задачу без знания кода

Начинающему специалисту полезно подготовить несколько вопросов. На каком этапе появляется задержка? Долго работают все части или только отдельные? Есть ли особенно частые значения? Не изменилась ли структура входящих данных по сравнению с обычным днём? Такие вопросы помогают перейти от ощущения «Spark тормозит» к проверяемой гипотезе.

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

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

Обучение в NovaData

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

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

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

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

Источники

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

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

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

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

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

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

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

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

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

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

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