Руководство по использованию 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 для хранения различных метаданных, включая статус задания, статус экземпляра задачи и т.д.