Что такое оркестрация и Airflow
Урок объясняет, зачем нужна оркестрация и какое место в ней занимает Apache Airflow.
Оркестрация — управление порядком, расписанием и зависимостями множества задач конвейера. Apache Airflow — популярный оркестратор, где конвейеры описываются кодом на Python.
Зачем оркестратор
Конвейер редко состоит из одного шага. Типичная цепочка: забрать данные из API, проверить их, преобразовать, загрузить в хранилище, обновить дашборд. Если просто запускать пять скриптов по cron, возникают вопросы: что делать, если второй шаг упал? Как не запустить четвёртый, пока не готов третий? Как перезапустить вчерашний день? Оркестратор отвечает на всё это.
cron: 5 независимых задач, никто не знает о сбоях соседа
Airflow: extract → validate → transform → load → notify
(если validate упал — дальше не пойдём, придёт алерт)Почему именно Airflow
- Конвейер — это код. DAG пишется на Python, лежит в git, проходит ревью.
- Веб-интерфейс. Видно, какие задачи прошли, какие упали, и можно перезапустить.
- Расписание и зависимости. Встроенный планировщик и язык зависимостей между задачами.
- Экосистема. Готовые операторы для баз, облаков, API.
Airflow появился в Airbnb в 2014 году как ответ на ровно эту боль: десятки взаимозависимых скриптов, запускаемых по cron, которые невозможно было ни отследить, ни надёжно перезапустить. Идея «описывать конвейер кодом, а не кликами в интерфейсе» оказалась настолько удачной, что Airflow стал стандартом отрасли. Сегодня у него есть конкуренты (Dagster, Prefect, Mage), но принципы — DAG, задачи, расписание, зависимости — у всех общие, поэтому, освоив Airflow, вы поймёте и остальные.
Как работает под капотом
В Airflow несколько компонентов: Scheduler решает, что и когда запускать; Executor/Workers исполняют задачи; Metadata DB хранит состояние; Webserver показывает интерфейс. Сам конвейер описывается объектом DAG. Этот код не запускается в браузере (нужен пакет airflow), поэтому помечен как text.
from airflow import DAG
from airflow.operators.empty import EmptyOperator
from datetime import datetime
with DAG(
dag_id="hello_airflow",
start_date=datetime(2026, 1, 1),
schedule="@daily",
catchup=False,
) as dag:
start = EmptyOperator(task_id="start")
finish = EmptyOperator(task_id="finish")
start >> finishА логику отдельного шага можно отлаживать как обычную Python-функцию, без Airflow. Например, шаг «посчитать контрольную сумму батча»:
import hashlib
batch = ["order-1", "order-2", "order-3"]
digest = hashlib.md5("|".join(batch).encode()).hexdigest()
print("Записей:", len(batch))
print("Контрольная сумма:", digest[:8])Вывод:
Записей: 3 Контрольная сумма: 5a9f3b2e
Частые ошибки
- Писать всю логику ETL прямо в DAG-файле. DAG должен описывать порядок задач; тяжёлую логику выносят в отдельные функции и модули.
- Путать определение DAG и его выполнение. Файл DAG лишь описывает граф; запускает задачи Scheduler по расписанию.
- Считать Airflow местом для самих вычислений. Airflow дирижирует, а тяжёлые расчёты лучше отдавать в Spark или SQL хранилища.
Итог
- Оркестратор управляет порядком, расписанием и зависимостями задач конвейера.
- Airflow описывает конвейеры кодом на Python (DAG) и даёт веб-интерфейс.
- Его компоненты: Scheduler, Workers, Metadata DB, Webserver.