1. Введение в Airflow и ключевые концепции
Введение в Airflow и ключевые концепции
Что такое Apache Airflow
Apache Airflow — это платформа для оркестрации рабочих процессов, в которой вы описываете пайплайны как код и затем планируете, запускаете и наблюдаете их выполнение. Airflow часто используют для задач инженерии данных: регулярной загрузки данных, преобразований, запуска расчётов, обновления витрин, машинного обучения и других повторяемых процессов.
Ключевая идея Airflow: вы явно описываете зависимости между шагами, а система берёт на себя планирование, очереди, ретраи, параллельность и наблюдаемость.
Официальные источники:
Зачем нужен оркестратор
В реальных системах данные редко обрабатываются одним скриптом. Обычно есть цепочка действий:
Если запускать всё вручную или через cron, быстро появляются проблемы:
Airflow решает эти проблемы, предоставляя:
Airflow как workflow-as-code
В Airflow пайплайн задаётся кодом на Python. Это важно по двум причинам:
При этом Airflow не предназначен для тяжёлых вычислений внутри себя. Типичный подход: Airflow оркестрирует внешние системы (Spark, DBT, DWH, Kubernetes Jobs), а не заменяет их.
Главные сущности Airflow
DAG
DAG (Directed Acyclic Graph, ориентированный ацикличный граф) — это описание пайплайна.
A -> B -> A.Каждый DAG имеет:
dag_id — уникальный идентификатор!Пример DAG как цепочки задач и зависимостей
Task
Task — шаг в DAG. Важно различать:
Одна и та же задача может запускаться много раз в разные моменты времени (например, каждый день).
Operator
Operator — шаблон того, что именно делает задача. Например:
BashOperator выполняет команду shellPythonOperator вызывает Python-функциюВ современном Airflow вы также встретите TaskFlow API, где задачи часто объявляют через декоратор @task и пишут более «питоничный» код. Под капотом это всё равно превращается в задачи DAG.
Task Instance и DAG Run
Когда DAG стартует, создаётся DAG Run — конкретный запуск пайплайна.
Внутри него для каждой задачи создаётся Task Instance — конкретное выполнение задачи в рамках данного запуска.
Это разделение помогает понимать UI:
Dependency
Зависимости — это правила порядка выполнения. Если transform зависит от extract, то transform не запустится, пока extract не выполнится успешно (или не будет обработан в соответствии с настройками).
Архитектура Airflow на высоком уровне
Airflow состоит из нескольких компонентов.
!Как основные компоненты Airflow взаимодействуют друг с другом
Кратко по ролям:
Справка по executor-ам в документации:
Планирование и время в Airflow: базовая модель
Планирование — источник многих ошибок новичков, поэтому важно зафиксировать терминологию.
Практический смысл: когда вы говорите «ежедневный DAG», Airflow создаёт запуски, каждый из которых отвечает за конкретный день данных.
Также важны настройки:
start_date — с какого момента расписание начинает действовать.catchup — нужно ли «догонять» пропущенные интервалы (если DAG был выключен/не существовал).Подробно:
Надёжность: ретраи, таймауты, идемпотентность
Airflow помогает управлять сбоями, но требует правильного дизайна задач.
Ретраи и политики ошибок
Частые настройки на уровне задач:
retries — число повторных попытокretry_delay — пауза между попыткамиexecution_timeout — ограничение по времени выполненияСмысл: временные проблемы (сеть, кратковременная недоступность сервиса) часто решаются повтором.
Идемпотентность
Идемпотентная задача при повторном запуске приводит систему к тому же корректному состоянию, что и при первом. Это критично, потому что ретраи и ручные перезапуски — нормальная часть эксплуатации.
Примеры практик:
Интеграции: Connections, Variables, Hooks, Sensors
Airflow умеет подключаться ко многим системам, но есть общие механизмы.
Connections
Connection — сохранённые параметры подключения (хост, логин, токен, extra). Это помогает:
Документация:
Variables
Variable — хранение конфигурации (например, путь к бакету, фича-флаг, имя схемы). Переменные удобны, но не предназначены для секретов.
Hooks
Hook — слой для работы с внешней системой (подключение, типовые операции). Многие операторы используют hooks внутри.
Sensors
Sensor — задача ожидания события: появления файла, обновления таблицы, завершения внешней джобы. Сенсоры помогают строить пайплайны, которые корректно зависят от внешнего мира.
Наблюдаемость: UI, логи, статусы
В Airflow удобно смотреть:
Практический принцип: если пайплайн нельзя удобно наблюдать и отлаживать, то он будет дорогим в поддержке.
Минимальный пример DAG
Ниже пример, который показывает структуру: DAG, две задачи и зависимость.
Что здесь важно:
with DAG(...) as dag задаёт контекст, в котором объявляются задачи.task_id должен быть уникальным внутри DAG.t1 >> t2 означает зависимость: сначала t1, потом t2.catchup=False отключает автоматическое создание «пропущенных» запусков.Как читать и обсуждать пайплайны Airflow
Чтобы одинаково понимать пайплайн в команде, полезно проговаривать:
Что дальше в курсе
В следующих материалах логично перейти от терминов к практике: