9.5 KiB
Статусы задач в Airflow: как понимать и использовать
Почему статусы задач так важны?
Когда вы только начинаете работать с Airflow, интерфейс может показаться сложным. Особенно если вы видите задачи разных цветов и не понимаете, что это значит. На самом деле, статусы задач — это ваш главный помощник в отладке и понимании того, что происходит с вашим пайплайном.
Основные статусы, которые вы увидите каждый день
В интерфейсе Airflow каждая задача подсвечивается цветом — по нему можно быстро понять, что с ней происходит. Для первых шагов достаточно запомнить несколько базовых статусов, которые удобно разделить на три группы.
1. Всё хорошо
🟢 Успешно (success) — ваша задача выполнилась без ошибок. Это то, к чему мы стремимся!
🟣 Пропущена (skipped) — задача была намеренно пропущена (часто в ветвящихся пайплайнах).
2. Есть проблема
🔴 Ошибка (failed) — что-то пошло не так. Задача упала, и вам нужно разбираться в коде.
3. Идёт работа или ожидание
🔵 Выполняется (running) — задача сейчас активно работает. Просто подождите немного.
🟡 В очереди (queued) — задача ждет своей очереди на выполнение. Это нормально, особенно если у вас много задач или мало ресурсов.
🟠 Запланирована (scheduled) — все готово к запуску, Airflow вот-вот начнет выполнение.
⚪ Нет статуса (none/no status) — задача еще не готова к запуску, потому что не выполнены её зависимости.
Специальные статусы (встречаются реже)
- Ошибка в зависимости (upstream_failed) — предыдущая задача упала, поэтому текущая даже не запускалась.
- Готова к повтору (up_for_retry) — задача упала, но Airflow попробует запустить её снова (если настроены повторные попытки).
- Завершена (shutdown) — задачу принудительно остановили во время выполнения.
- Отложена (deferred) — задача приостановлена и ждет внешнего события.
- Наблюдение (sensing) — специальный статус для сенсоров, которые ждут определенных условий.
Как задача проходит свой путь: пошагово
Представьте, что у вас есть простая задача. Вот как она проходит свой жизненный цикл:
-
Создание → Статус: "Нет статуса"
Airflow создает задачу, но еще не может её запустить. -
Готовность → Статус: "Запланирована"
Все зависимости выполнены, задача готова к работе. -
Ожидание → Статус: "В очереди"
Задача ждет свободного рабочего места. -
Работа → Статус: "Выполняется"
Задача активно выполняется. -
Завершение → Статус: "Успешно"
Всё прошло отлично!
На диаграмме ниже показаны те же этапы, но уже с привязкой к внутренним компонентам Airflow.
flowchart LR
%% Стили
classDef component fill:#8BC34A,stroke:#333,stroke-width:1px,color:#fff;
classDef state fill:#ffffff,stroke:#333,stroke-width:1px,color:#000;
classDef success fill:#C8E6C9,stroke:#388E3C,stroke-width:1px,color:#000;
classDef sensor fill:#ffffff,stroke:#8BC34A,stroke-width:1px,color:#000;
%% Жизненный цикл задачи
NONE["No status / None"]:::state --> SCH[Scheduler]:::component
SCH --> SCHEDULED[Scheduled]:::state
SCH --> REMOVED[Removed]:::state
SCH --> UPSTREAM_FAILED[Upstream failed]:::state
SCHEDULED --> EX[Executor]:::component
EX --> QUEUED[Queued]:::state
QUEUED --> WORKER[Worker]:::component
WORKER --> RUNNING[Running]:::state
RUNNING --> SUCCESS[Success]:::success
RUNNING --> FAILED[Failed]:::state
RUNNING --> SHUTDOWN[Shutdown]:::state
%% Альтернативные переходы при ретраях
FAILED -.-> UP_FOR_RETRY["Up for retry"]:::state
SHUTDOWN -.-> UP_FOR_RETRY
UP_FOR_RETRY --> SCH
%% Сенсоры: режим reschedule
RUNNING --> UP_FOR_RESCHEDULE["Up for reschedule"]:::sensor
UP_FOR_RESCHEDULE --> SCH
%% Все стрелки чуть толще
linkStyle default stroke-width:2px;
%% Альтернативные переходы (ретраи) — зелёные и ещё чуть толще
linkStyle 11 stroke:#4CAF50,stroke-width:2.5px;
linkStyle 12 stroke:#4CAF50,stroke-width:2.5px;
Легенда к диаграмме состояний задачи
Зелёные блоки (Component) — внутренние компоненты Airflow, которые двигают задачу по жизненному циклу:
- Scheduler — планировщик, проверяет зависимости задач и решает, что ставить в очередь.
- Executor — исполнитель, получает от Scheduler список задач и распределяет их по воркерам.
- Worker — рабочий процесс (worker), который фактически запускает код оператора.
Белые блоки (Task stage) — состояния конкретного запуска задачи (task instance, TaskInstanceState). На диаграмме они показывают, через какие шаги проходит задача от появления в DAG до успешного завершения или ошибки. Подробный справочник по всем состояниям есть в документации по ссылке ниже.
Белые блоки с зелёной рамкой (Task stage only for sensor) — состояния, характерные только для сенсоров:
- Up for reschedule (
up_for_reschedule) — сенсор в режимеreschedule: условие ещё не выполнено, задача «усыплена» и позже будет снова поставлена в расписание без непрерывной работы воркера.
Официальное описание всех состояний
TaskInstanceStateи их жизненного цикла смотрите в документации Airflow:
Tasks → Task Instances.
Что делать, если задача упала?
Если вы видите красный статус (failed), не паникуйте! Это нормальная часть работы с данными. Вот что делать:
- Нажмите на задачу в интерфейсе Airflow
- Посмотрите логи — там будет точная причина ошибки
- Исправьте код или настройки
- Перезапустите задачу кнопкой "Clear"
Советы для начинающих
- Не бойтесь статусов — они ваш друг, а не враг
- Самые важные статусы для начала: success, failed, queued, running
- Остальные статусы вы будете изучать по мере необходимости
- Цвета в интерфейсе — это быстрый способ понять состояние вашего пайплайна
Помните: понимание статусов задач — это как научиться читать дорожные знаки. Сначала кажется много информации, но со временем это становится второй натурой!
Полный список возможных состояний задач (TaskInstanceState) и их классификацию на терминальные и промежуточные можно посмотреть в официальной документации Airflow: https://airflow.apache.org/docs/apache-airflow/2.9.3/_api/airflow/utils/state/index.html