Почему в Spark одна цель пользователя превращается в несколько вычислений, этапов и задач. Объясняем названия и счётчики без программирования.
Почему на экране так много строк
Вы попросили подготовить один итоговый отчёт, а в окне наблюдения Spark появились несколько строк и десятки задач. Это не обязательно повторный запуск или ошибка. Пользовательская цель и внутренние единицы работы имеют разный масштаб. Чтобы разобраться, полезно читать экран как вложенный план выполнения.
Spark — система обработки данных, которая разбивает вычисление на более мелкие части. Здесь нас интересует не устройство серверов, а связь трёх слов в интерфейсе: job, stage и task. Их можно перевести как вычислительная работа, этап и отдельная задача. Названия помогают увидеть, какая часть плана уже закончилась и где сейчас приходится ждать.
Работа, этап и задача
В словаре Apache Spark job обозначает параллельное вычисление, возникающее при запросе результата. Оно состоит из задач и делится на зависимые этапы. Task — отдельная единица работы, которую выполняет один исполнитель, то есть рабочий процесс Spark. Один исполнитель может выполнить много задач.
Поэтому сто задач не означают сто серверов. А одна цель человека, например подготовка отчёта, не обязана соответствовать единственному job: приложение может запрашивать несколько результатов. Сначала выясните, какой уровень показывает выбранная вкладка. Иначе легко принять число небольших частей за число отдельных пользовательских запусков.
Зачем нужны границы этапов
Представим подготовку сводки по городам. Сначала нужно прочитать исходные сведения, а затем собрать вместе записи, относящиеся к одному городу. Вторую часть нельзя корректно закончить, пока не готовы необходимые результаты первой. Граница отмечает зависимость между частями вычисления.
В Spark важной причиной такой границы бывает перераспределение данных для новой группировки. Этот обмен называют shuffle; его связь с этапами описана в руководстве Apache Spark. Для чтения экрана достаточно понимать следствие: следующий этап может ожидать предыдущий. Подробности передачи сведений между машинами для этого первого разбора не нужны.
Условный пример с шестью задачами
Допустим, в выбранной работе первый этап содержит четыре задачи подготовки, а следующий — две задачи получения итогов. После успешного выполнения всех частей получится шесть завершённых задач. Четыре и две здесь выбраны для объяснения; это не стандартные настройки Spark и не правило для любого отчёта.
Если несколько задач выполняются одновременно, сумма их длительностей может превышать время ожидания человека. Например, две задачи по минуте при одновременном выполнении не требуют двух последовательных минут. Кроме того, неудачная попытка и её повтор относятся к истории выполнения. Поэтому число попыток нужно отличать от числа логических задач, которые требовались выбранному этапу.
В каком порядке смотреть интерфейс
Сначала найдите нужную вычислительную работу и проверьте её состояние: продолжается она, закончилась или завершилась с ошибкой. Затем откройте её этапы. Наконец переходите к задачам конкретного этапа и сравнивайте их длительности и состояния. Так вопрос «почему всё долго?» постепенно превращается в более точный вопрос об определённой части.
Документация интерфейса Spark описывает страницы работ, этапов и подробные показатели задач, включая попытки выполнения. Названия столбцов и доступные подробности зависят от страницы. В представлении обработки таблиц также можно увидеть связь пользовательского вычисления с относящимися к нему работами и этапами.
Что можно понять, а что требует проверки
Одна заметно более долгая задача — полезный повод для исследования, но ещё не готовый диагноз. По одному счётчику нельзя утверждать, что системе не хватает памяти или что нужно добавить машины. Сначала сохраните название работы, проблемный этап, его состояние и время наблюдения. Затем сравните подробности с соседними задачами.
Для первого самостоятельного разбора достаточно ответить на три вопроса: какой результат запрошен, какой этап сейчас мешает его получить и чем выделяется этот этап. Такое описание уже помогает предметно обратиться к более опытному коллеге. Само количество этапов не является оценкой качества решения: сложная обработка может обоснованно состоять из нескольких зависимых частей.
Как перейти к практике
На курсе «PySpark для инженеров и аналитиков данных» можно изучать обработку данных системно. При разборе учебного результата полезно учиться связывать цель обработки с тем, что показывает ход её выполнения.


