Руководство по использованию AirFlow (оркестратор для задач ETL)
Описание функциональности сервиса Airflow
AirFlow - это сервис для разработки, планирования и мониторинга рабочих процессов, в частности сценариев выгрузки, преобразования и загрузки данных (ETL).
Основной сущностью в AirFlow является DAG - (направленный ациклический граф, DAG - directed acyclic graph) — граф, в котором отсутствуют направленные циклы, но могут быть «параллельные» пути, выходящие из одного узла и разными путями приходящие в конечный узел.
Большинство сценариев по обработке и трансформации данных (ETL) можно реализовать в виде DAG в AirFlow — набора связанных задач, реализованных в виде python-скриптов. Для работы можно использовать, например, PyCharm + Git (Bitbucket) или как вариант можно хранить python-скрипты в S3.
Основная функциональность Airflow, которая используется в SDP Analytics:
-
Создание подключения к источникам/базам данных - подключение проводится непосредственно в UI Airflow с указанием хоста, логина и пароля (хранится защищенно)
-
Создание пользовательских сценариев ETL-процессов - пользователь создает файл .py в соответствии с требованиями Airflow, в котором он ини циализирует и описывает ETL-процесс в виде DAG. Созданный DAG перемещается в S3 bucket, который непосредственно синхронизируется с Airflow.
-
Управление сценариями ETL-процессов из UI Airflow - созданные пользователем файлы .py с описанием ETL-процессов, представляют собой набор DAGs, доступных из веб-интерфейса Airflow.
Основные компоненты Airflow
DAG
В Airflow DAG — это ориентированный ациклический граф, т.е. граф, у которого отсутствуют циклы, но могут быть параллельные пути, выходящие из одного и того же узла. Простыми словами DAG это сущность, объединяющая ваши задачи в единый data pipeline (или цепочку задач), где явно видны зависимости между узлами.

Планировщик (Scheduler)
Планировщик задач в Airflow построен на Celery. Celery — это Python-библиотека, позволяющая организовать очередь плюс асинхронное и распределенное исполнение задач. Со стороны Airflow все задачи делятся на пулы. Пулы создаются вручную. Как правило, их цель — ограничить нагрузку на работу с источником или типизировать задачи внутри DWH. Пулами можно управлять через web-интерфейс.
Задача (Task)
Задача определяет единицу работы в группе доступности базы данных; он представлен в виде узла в графе DAG и написан на Python. Каждая задача представляет собой реализацию оператора, например PythonOperator для выполнения некоторого кода Python или BashOperator для выполнения команды Bash.
Оператор (Operator)
Operator — это части кода, ответственные за выполнение какого-либо конкретного действия. Есть три типа операторов:
-
action, как, например,
PythonOperator
, который в силах выполнить любой (валидный) Python-код; -
transfer, которые перевозят данные с места на место, скажем,
MsSqlToHiveTransfer
; -
sensor же позволит реагировать или притормозить дальнейшее выполнение DAG до наступления какого-либо события.
Executor
Executor - процесс очереди сообщений, который организует рабочие процессы для выполнения задач. Основные типы Executor:
-
LocalExecutor
-
CeleryExecutor
-
KubernetesExecutor
WebUI
Портал, на котором пользователи могут просматривать связанный статус DAG. Полезная ссылка Airflow UI .

База данных метаданных (Metadata DB)
хранилище метаданных Airflow для хранения различных метаданных, включая статус задания, статус экземпляра задачи и т.д.