Включите исполнение JavaScript в браузере, чтобы запустить приложение.

Apache AirFlow: что это такое и принципы работы архитектуры

17 сен 2024
Подробное руководство по Apache AirFlow для начинающих. Разберем, что такое Apache AirFlow, принципы работы и основные сущности архитектуры.

Apache Airflow — эффективный инструмент для автоматизации бизнес-операций. Платформа имеет открытый исходный код. Ее применяют для проектирования, обработки и организации данных. Также система полезна для отслеживания хода работы, реализации проектов и выявления ошибок. Дополнительные плагины позволяют использовать Airflow с любыми другими системами — это делает мониторинг еще более эффективным. В статье мы подробнее разбираем, что такое Apache AirFlow, объясняем принципы работы платформы и ее архитектуру. Также рассказываем о плюсах и минусах системы и областях ее применения.

  • Apache Airflow — что это такое?
  • Архитектура Apache Airflow
  • Поток данных (DAG, Directed Acyclic Graph)
  • Задача (Task)
  • Оператор (Operator)
  • Другие составляющие Apache Airflow
  • Загрузчик данных (Data Loader)
  • Сенсор (Sensor)
  • Планировщик (Scheduler)
  • Метаданные (Metadata)
  • Исполнитель (Executor)
  • Плюсы и минусы Apache Airflow
  • Области применения
  • Как начать работу с Apache Airflow?
  • Установка на Windows
  • Установка на macOS

Apache Airflow — что это такое? 

Apache Airflow — это open source платформа для планирования и мониторинга данных. Сейчас права на сервис принадлежат Apache Software Foundation. Airflow написана на Python. Универсальность платформы — в том, что она подходит для ведения совершенно разных проектов. Airflow может отслеживать задачи без интервала, но все же больше подходит для конвейеров c привязкой к определенному времени.

Apache Airflow может отправлять оповещения о статусе задач и сообщения через Slack или по электронной почте. Важная составляющая работы системы — оркестрация конвейеров данных. Она нужна для сортировки, координации, планирования и управление сложными конвейерами данных из различных источников. В Airflow подобные рабочие процессы представлены как Directed Acyclic Graphs (DAG). Именно благодаря этому можно одновременно выполнять и отслеживать много процессов.

Программа была создана в 2015 году калифорнийской компанией AirBnB. В то время ее приложение и сайт для сдачи и аренды жилья стремительно набирали популярность. Многие системы были перегружены, решение задач занимало больше времени.

Компания наняла специалистов по обработке данных, аналитиков и инженеров, которые занимались автоматизацией процессов. IT-специалисты разработали OS-инструмент, получивший название Airflow. Он значительно облегчил работу программистов. Всего за несколько лет сервис стал стандартом в области data engineering.

В апреле 2016 года проект присоединился к Apache Incubator, а в январе 2019 года стал собственностью ASF. На конец 2020 года платформу поддержали более 1400 участников. Ее показатель — 11 230 вкладов и 19 800 звезд на GitHub.

Архитектура Apache Airflow

Изучение компонентов и модульной архитектуры позволяет понять, как они взаимодействуют между собой. Выделяют три основных составляющих.

Поток данных (DAG, Directed Acyclic Graph) 

Directed Acyclic Graphs — это структура, состоящая из объектов (узлов), которые связаны между собой. Directed означает, что части графа ориентированы и представляют собой однонаправленные связи. Acyclic значит, что графы не имеют схем. Так, узел B, расположенный ниже узла A, точно не может находиться и выше узла A. Это гарантирует, что в конвейерах нет бесконечных циклов.

DAG можно подстраивать под определенные цели. Аналитик или разработчик может сопровождать задачи, которые выполняются параллельно или последовательно. Удобно также реализовывать условные ветки и визуально объединять задачи в группы. 

Каждый запуск DAG имеет уникальный идентификатор dag_run_id и содержит один или несколько экземпляров задачи. История предыдущих запусков хранится в базе данных.

Другие возможности DAG:

  • динамически сопоставленные задачи — возникают автоматически на основе определяемых пользователем входных данных. Количество динамически сопоставленных экземпляров задачи показано в скобках ([]) после идентификатора;
  • метки окончания — появляются на границе между двумя задачами. Эти метки часто полезны для аннотирования решений о ветвлениях в графе DAG;
  • группа задач — инструмент для логической и визуальной группировки задач;
  • задачи настройки — помогают воспользоваться преимуществами дополнительного интеллектуального распределения зависимостей. Они отображаются в виде диагональных стрелок рядом с идентификаторами задач и соединяются пунктирной линией.

Задача (Task)

Каждый узел в DAG состоит из задач. Определение их последовательности, которую необходимо выполнить, называют конвейером. Задачи имеют вид функций или классов, созданных для выполнения определенных операций.

Оператор (Operator)

Необходим для определения действий, которые будут выполнять задачи. DAG гарантирует, что операторы работают в определенном порядке. 

Есть три основные категории операторов:
1. Операторы действий работают с функциями, например, PythonOperator или BashOperator.

2. Операторы передачи позволяют передавать данные из одного источника в другой, например, S3ToRedshiftOperator. 

3. Датчики. Используются для проверки условий. 

Каждый оператор как класс определяет действия индивидуально. При этом они могут передавать информацию друг другу с помощью XComs.

Другие составляющие Apache Airflow 

Подробнее рассмотрим дополнительные элементы сервиса и принципы их работы.

Загрузчик данных (Data Loader)

Применяются для поиска данных и их анализа. Данные могут располагаться в разных источниках, но чаще всего взаимодействие происходит с БД. Data Loader, как DAG, легко настроить под конкретные задачи. У них развита адаптивность.

Сенсор (Sensor)

Вид операторов, предназначенных для выполнения одной задачи: ожидать, пока статус объекта изменится. Важность сенсоров заключается в том, что без них не удастся запускать задачи в правильной последовательности. Активизация задачи происходит лишь в том случае, если для этого есть возможность и подходящие условия.

Планировщик (Scheduler)

Распределяет задачи в определенном порядке. Планировщик запускает процесс, который помогает отслеживать изменение событий. Также он синхронизируется со всеми группами DAG в указанном каталоге. По умолчанию планировщик раз в минуту собирает результаты анализа и проверяет, есть ли активные задачи для запуска.

Метаданные (Metadata)

В них находится важная информация о ​​конфигурации ролей, наличии разрешений среды прошлых и нынешних запусков задач. Потеря данных может помешать работе DAG, не будет возможности получить доступ к данным прошлых запусков. Важно делать резервное копирование, чтобы в случае необходимости запускать аварийное восстановление информации. 

Airflow использует SQLAlchemy и Object Relational Mapping (ORM) в Python для подключения к metadata на уровне приложения. Любую БД, поддерживаемую SQLAlchemy, теоретически можно настроить для размещения метаданных. Распространенные базы данных:

  • Postgres
  • MySQL
  • SQLite

Исполнитель (Executor) 

Исполнитель работает в паре с планировщиком. Основных типов исполнителей 4: SequentialExecutor, LocalExecutor, CeleryExecutor, KubernetesExecutor. 

Локальный исполнитель параллельно выполняет задачи на одном компьютере. Это значит, что ресурсы за пределами этого компьютера для запуска группы обеспечения доступности баз данных точно не нужны. 

Celery — это способ распределенного запуска процессов Python. Чтобы оптимизировать гибкость и доступность, исполнитель Celery работает с «пулом» независимых исполнителей и использует сообщения для делегирования задач.

Kubernetes опирается на один модуль, который динамически делегирует работу и ресурсы. Для каждой задачи, которую необходимо выполнить, исполнитель обращается к API Kubernetes для динамического запуска модулей Pod.

SequentialExecutor —  исполнитель по умолчанию при первой установке Airflow. Это единственный исполнитель, который можно использовать с sqlite. Он не поддерживает множественные соединения. Этот исполнитель одновременно будет запускать только один экземпляр задачи.

Плюсы и минусы Apache Airflow 

Среди преимуществ Apache Airflow:

  • производительность и быстрая работа. Сервис создан на базе Python. Это популярный язык программирования. Его используют и профессионалы, и те, кто только начинает развиваться в IT. Это делает инструмент доступным для разработчиков, технических специалистов, аналитиков;
  • гибкость и удобство. Платформа позволяет настраивать задачи на усмотрение пользователя, применять собственную логику, отвечающую потребностям бизнеса, и автоматизировать многие операции. В Apache Airflow много настроек, которые делают адаптацию под конкретные цели еще более простой;
  • интеграции и расширения. Сервис работает в связке с другими платформами с помощью хуков — высокоуровневых интерфейсов, которые избавляют от необходимости искать специальные библиотеки или писать код для работы с внешними API. Можно быстро подключиться к базам данных, облачным сервисам и другим инструментам: MySQL, PostgreSQL, Oracle, Google Cloud, Snowflake, Slack. Если нет готовых подключений, платформа позволяет разработать их и реализовать подходящий вариант;
  • совместное пользование. В новых версиях есть REST API, который значительно упрощает доступ для других пользователей. Можно запускать рабочие процессы по требованию, автоматизировано управлять пользователями и в режиме совместного доступа создавать приложения на основе функционала веб-интерфейса;
  • поддержка сообщества и открытый код. Благодаря большому количеству активных пользователей, которые уже сталкивались со сбоями в функционировании системы, можно найти ответы на многие вопросы. Только в Slack в официальной группе Airflow больше 17 тысяч подписчиков. 

У Apache Airflow есть и недостатки:

  • проблемы с документацией. Большинство примеров в руководствах пользователя приведено вкратце, пользователям не хватает подробностей и пошаговых инструкций. Доработка документации решила бы проблемы с адаптацией новичков, развертыванием инструмента в команде.
  • настройки зависимостей. Если удалить задачи из сценария DAG, они исчезнут из пользовательского интерфейса, как и все метаданные о них. Пользователь не сможет вернуться к предыдущей модификации конвейера. Airflow советует каждый раз создавать новую группу DAG под отдельным идентификатором. Другой вариант — управление группами DAG в Git, GitHub или другом хранилище. Это в разы усложняет рабочий процесс, как и то, что нужно не забывать отмечать зависимости между задачами.
  • сложная организация. Платформа состоит из множества компонентов. Чтобы качественно работать, за каждым нужно следить. Когда дело доходит до производственной среды, сложность только увеличивается. Пример — поддержка Celery, кластеры Kubernetes. Из-за этих технических проблем компаниям приходится покупать платные сервисы. В них встроены функции качественного развертывания, масштабирования и обслуживания.

Области применения

Более 300 компаний, включая Adobe, Slack, Walmart, используют Airflow для обработки данных. Инструмент применяется в разных сферах для решения важных задач:

  1. Анализ рабочих процессов. С помощью удобной системы отслеживания задач легко управлять всеми процессами производства или реализации проекта. Платформа может отображать аналитику на панели управления, подготавливать входные данные для LLM.
  2. Организация ETL и ELT. Extract-Transform-Load (ETL) и Extract-Load-Transform (ELT) нужны для выполнения сложных операций по извлечению и преобразованию данных. Платформа подходит для реализации процессов: она гибкая, у нее понятный интерфейс. 
  3. Управление инфраструктурой. Airflow может взаимодействовать с любым API и providers . Это делает инструмент подходящим для управления инфраструктурой — кластерами Kubernetes или Spark, работающими в любом облаке. В Apache Airflow для аналитика доступна функция настройки/удаления — особый тип задач с автоматизацией, позволяющий разворачивать и отключать инфраструктуру в указанный момент.
  4. Модели машинного обучения. Machine Learning Operations (MLOps) или операции машинного обучения последнее время фокусируются на разработке конвейеров вокруг таких моделей, как GPT-4 или Command. Airflow и Weaviate применяют для работы автоматического конвейера RAG. Он находит данные из новостных статей, а также дает советы по ведению бизнеса. 

В облаке от Яндекс сервис объединен с объектным хранилищем, системами управления базами данных, платформами для машинного обучения. Yandex Cloud использует Apache Airflow для быстрой обработки больших массивов данных. А, например, Adobe применяет Airflow в качестве основного сервиса для службы рабочих процессов: распределение данных, автоматизация процессов и аналитика становится в разы проще.

Как начать работу с Apache Airflow?

Сервисом можно пользоваться на разных операционных системах. Установка Airflow Apache на Windows и macOS займет пару минут.

Установка на Windows

  1. Загрузите и установите Python (версии 3.7 или выше) с официального сайта.
  2. Добавьте Python в системную переменную PATH во время процесса установки.
  3. Откройте терминал или командную строку и выполните следующую команду для установки: pip install apache-airflow.
  4. В терминале или командной строке выполните команду, чтобы запустить базу данных: airflow db init.
  5. Создайте пользователя-администратора: airflow users create --username admin --firstname <YOUR_FIRST_NAME> --lastname <YOUR_LAST_NAME> --role Admin --email admin@example.com.
  6. Запустите веб-сервер: airflow webserver --port 8080.
  7. Запустите планировщик: airflow scheduler.
  8. Перейдите на сайт http://localhost:8080 в браузере, чтобы получить доступ к веб-интерфейсу.
  9. Войдите в систему, используя учетные данные администратора.

Установка на macOS 

  1. Загрузите и установите Python (версии 3.7 или выше) с официального сайта. Можно сразу настроить виртуальную среду для управления зависимостями Python.
  2. Откройте терминал и создайте папку проекта: mkdir -p ~/Desktop/Airflow-Local

cd ~/Desktop/Airflow-Local

  1. Убедитесь, что виртуальная среда Python настроена и активирована.
  2. Установите для переменной среды AIRFLOW_HOME каталог проекта: export AIRFLOW_HOME=~/Desktop/Airflow-Local
  3. Установите Apache Airflow с помощью pip, если у вас установлен Python 3.10 и вы хотите установить Airflow версии 2.6.1.:

AIRFLOW_VERSION=2.6.1

PYTHON_VERSION=3.10

CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"

pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"

  1. После завершения установки запустите команду, чтобы инициализировать базу данных, зарегистрировать пользователя и запустить все компоненты.
  2. Вы увидите учетные данные для входа в журнал или в файле standalone_admin_password.txt в каталоге проекта.
  3. Теперь можно войти в систему и получить доступ к Airflow, перейдя по адресу http://localhost:8080/.