Files
airflow-manual/06 - Статусы задач в Airflow.md
2025-12-06 19:13:19 +03:00

140 lines
9.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Статусы задач в 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)** — специальный статус для сенсоров, которые ждут определенных условий.
## Как задача проходит свой путь: пошагово
Представьте, что у вас есть простая задача. Вот как она проходит свой жизненный цикл:
1. **Создание** → Статус: "Нет статуса"
Airflow создает задачу, но еще не может её запустить.
2. **Готовность** → Статус: "Запланирована"
Все зависимости выполнены, задача готова к работе.
3. **Ожидание** → Статус: "В очереди"
Задача ждет свободного рабочего места.
4. **Работа** → Статус: "Выполняется"
Задача активно выполняется.
5. **Завершение** → Статус: "Успешно"
Всё прошло отлично!
На диаграмме ниже показаны те же этапы, но уже с привязкой к внутренним компонентам Airflow.
```mermaid
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](https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/tasks.html#task-instances).
## Что делать, если задача упала?
Если вы видите красный статус (failed), не паникуйте! Это нормальная часть работы с данными. Вот что делать:
1. **Нажмите на задачу** в интерфейсе Airflow
2. **Посмотрите логи** — там будет точная причина ошибки
3. **Исправьте код** или настройки
4. **Перезапустите задачу** кнопкой "Clear"
## Советы для начинающих
- **Не бойтесь статусов** — они ваш друг, а не враг
- **Самые важные статусы** для начала: success, failed, queued, running
- **Остальные статусы** вы будете изучать по мере необходимости
- **Цвета в интерфейсе** — это быстрый способ понять состояние вашего пайплайна
Помните: понимание статусов задач — это как научиться читать дорожные знаки. Сначала кажется много информации, но со временем это становится второй натурой!
> Полный список возможных состояний задач (TaskInstanceState) и их классификацию на терминальные и промежуточные можно посмотреть в официальной документации Airflow:
> https://airflow.apache.org/docs/apache-airflow/2.9.3/_api/airflow/utils/state/index.html