Память исполнителя Spark: почему задача может не поместиться

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

Один контейнер обработки переполнен карточками данных, соседние остаются почти пустыми.

Координатор и рабочие процессы

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

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

На что расходуется память исполнителя

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

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

Что происходит, когда места не хватает

Часть промежуточных данных Spark может перенести на диск; обработка при этом обычно замедляется. Если рабочему процессу всё равно недостаёт памяти, задача может завершиться ошибкой или повторяться после сбоя. Но долгая работа сама по себе не доказывает именно нехватку памяти: причиной могут быть медленное хранилище, неравномерное распределение данных или ожидание соседнего шага. Диагноз ставят по показателям задачи и сообщениям о сбое.

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

Условный пример с перекосом

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

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

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

Начните с ответа на три вопроса: какой процесс сообщил об ошибке, на каком этапе она возникла и одинаково ли долго работали части задания. Интерфейс мониторинга Spark показывает задачи и показатели исполнителей; официальная документация описывает метрики памяти, передаваемые от исполнителей. Затем выясните, не вырос ли входной набор, не изменилось ли распределение и не добавили ли сохранение промежуточных данных.

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

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

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

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

Источники

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

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

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

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

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

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

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

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

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

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

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