Анализ данных • 22 марта 2024 • 5 мин чтения

Как Apache Airflow помогает дирижировать данными компаний

Apache Airflow — это платформа управления обработкой данных с открытым исходным кодом. Её применяют в разных компаниях — от стартапов до крупных корпораций. Разберём, как она устроена и чем полезна для бизнеса.

Где и кем применяется Apache Airflow

Чтобы данные из корпоративных систем можно было анализировать, их нужно обработать. Обычно это происходит в три этапа: извлечение, трансформация и загрузка. Этот принцип называется ETL (Extract Transform Load). Чем больше данных и аналитических задач, тем больше ETL-процессов. Управлять ими вручную трудозатратно. Airflow берёт на себя часть процесса по управлению данными: администратор задаёт параметры и порядок выполнения задач, а всё остальное делает платформа. Airflow подходит не только для ETL-процессов, но и для автоматизации других задач. Например, создания и отправки отчётов, управления инфраструктурой.

Кому пригодится Airflow:

Инженерам данных — для проектирования, разработки и обслуживания систем обработки данных. Эти специалисты отвечают за то, чтобы информация из баз данных, веб-серверов и файлов журналов корректно преобразовывалась и загружалась в хранилища данных. Инженеры предоставляют другим специалистам выгрузки из хранилищ, которые можно использовать для аналитических задач.
Аналитикам и специалистам по Data Science — строить витрины данных, отчёты и готовить данные для машинного обучения.
Разработчикам — автоматизировать загрузку данных для тестирования приложения, настраивать обмен информацией между базами данных или с внешними системами.
Менеджерам проектов — для планирования и мониторинга процессов обработки данных.

На курсе «Инженер данных» студенты используют AirFlow для автоматизации ETL-процессов и работы с большими объёмами неструктурированной информации в аналитических базах данных. Обучение принесёт больше пользы, если есть опыт работы с Python — Airflow написан именно на этом языке. Также важно понимать базовый синтаксис, запросы и функции SQL — для создания, хранения и обработки данных.

Архитектура AirFlow и принципы его работы

Чтобы разобраться в Apache Airflow, важно понимать, что такое конвейеры данных или пайплайны. Конвейер — это последовательность преобразований данных. Архитектура Airflow базируется на концепции направленного ациклического графа (DAG). В этом графе все вершины (задачи) связаны между собой в определенном порядке и нет циклов. Это позволяет Airflow отслеживать зависимости между задачами и запускать пайплайны в правильном порядке. Для DAG неважно, что происходит внутри задач — только порядок запуска, сколько раз повторять и, например, нужны ли паузы между задачами.

Пример простейшего DAG. В нём есть четыре задачи — A, B, C и D. Стрелки указывают порядок, в котором они должны выполняться, и какие задачи зависят от других. Если B и C зависят от A, то они не могут начаться, пока A не будет успешно завершена. У каждой задачи — свои параметры. Например, время выполнения, количество повторений. Источник: документация Airflow

В архитектуре Airflow есть несколько компонентов. Они делятся на основные и дополнительные. Вторые могут быть частью основных или применяются для специфических задач.

Основные компоненты

Планировщик (Scheduler) читает расписание каждого DAG и определяет, какие задачи должны быть запущены и когда. Например, планировщик может определить, что ежедневная задача обработки данных должна быть запущена в 11:00 каждый день.

Executor (Исполнитель) — компонент, который определяет, как именно задачи будут выполняться. Airflow предоставляет несколько типов исполнителей, которые могут работать в различных средах и конфигурациях:
SequentialExecutor — самый простой тип, может работать только с одной задачей.
LocalExecutor — может выполнять несколько задач одновременно, но зависит от узла, на котором запущен. Не работает узел — исполнитель тоже не работает.
CeleryExecutor — на базе библиотеки Celery на Python. Подходит для управления очередями из задач. Этого исполнителя можно масштабировать и таким образом решить проблему LocalExecutor. Если один из узлов перестал работать, задача переходит к другому исполнителю.
KubernetesExecutor — для сред с большими объёмами данных и высокой нагрузкой. Позволяет запускать задачи в изолированных контейнерах. В этом случае код запускается в собственном «пузыре» — отдельно от других процессов. Если один контейнер перестаёт работать, на другие это не влияет. Так получается более гибко и безопасно управлять задачами и распределять нагрузку.

База метаданных. Такие базы хранят описательную информацию, а не фактическую. Её используют для управления, организации и поиска данных. База метаданных в Airflow хранит информацию о задачах, их статусе, зависимостях и истории выполнения.

Веб-сервер — предоставляет пользовательский интерфейс для мониторинга, управления и запуска задач. Через веб-интерфейс пользователи могут просматривать список задач, проверять их статус и управлять расписанием выполнения.

Дополнительные компоненты

Workers (Работники) — объекты или процессы, которые выполняют задачи, назначенные исполнителем. Работники могут быть частью планировщика или отдельным компонентом. Их роль и наличие зависят от выбранного исполнителя. Например, при использовании SequentialExecutor или LocalExecutor worker'ы — часть процесса. В случае с CeleryExecutor они могут быть отдельными процессами или даже машинами.

Триггер — выполняет отложенные задачи. В базовой установке, где отложенные задачи не используются, триггер не нужен.

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

Плагины — для расширения функциональности Airflow. Например, чтобы улучшить мониторинг или быстро преобразовывать данные из базы в таблицу.

Пример архитектуры Apache Airflow, если выбрали CeleryExecutor. Файл конфигурации создаёт администратор сервиса, например инженер данных. В нём содержатся настройки и параметры, которые влияют на работу Airflow. Например, как остальные компоненты будут подключаться к базе метаданных. К файлу обращается планировщик, веб-сервер и работники

Разберём принцип работы Apache Airflow на примере. Предположим, что есть задача — ежедневно обрабатывать данные о продажах в компании розничной торговли: выгружать и готовить их для анализа. Затем — отправлять отчёты маркетологам по электронной почте. Как настроить эту задачу с помощью Airflow:

1. Инициировать DAG. Пользователь создает DAG для обработки данных о продажах и задаёт расписание выполнения. Этот DAG определяет последовательность задач, которые нужно выполнить.
2. Запланировать задачу. Планировщик читает расписание для DAG и определяет, что задача обработки данных должна быть запущена в определённое время каждый день.
3. Выполнить задачи. Исполнитель запускает задачи, определённые в DAG, в соответствии с расписанием. Например, он может запустить задачу для загрузки и обработки данных.
4. Мониторинг и управление. Инженер проверяет статус выполнения задач через веб-интерфейс, смотрит журналы выполнения, перезапускает или приостанавливает выполнение при необходимости.

Так выглядит интерфейс Airflow, в котором инженер данных может следить за выполнением задач

Основные сущности Apache AirFlow

1. DAG’и (DAGs) — ключевая сущность Airflow. Это скрипты на Python, которые описывают логику выполнения задач: какие должны быть выполнены, в каком порядке и как часто.

2. Задача (Task) — описывает, что делать. Например, выборку данных, анализ, запуск других систем. Каждая задача — это экземпляр оператора с определенными параметрами. Допустим, есть DAG для загрузки данных из базы. Можно создать задачу для выполнения оператора, который отправит SQL-запрос для загрузки данных. Она будет содержать информацию о том, какой SQL-запрос нужно выполнить, когда и в каком контексте.

3. Оператор (Operator) — класс Python, который определяет, что нужно сделать в рамках задачи. Есть операторы для выполнения скриптов Bash, кода Python, SQL-запросов. Например, чтобы выполнить скрипт Python для анализа данных, используют PythonOperator.

Преимущества и недостатки Airflow

Преимущества

Открытый исходный код. У платформы активное сообщество разработчиков, которые постоянно её развивают.

Масштабируемость и отказоустойчивость. Apache Airflow может работать с большим объёмом данных и задач. Даже если в программе произошел сбой, она сохранит историю задач — не придётся создавать их заново.

Простой интерфейс, с которым могут работать не только инженеры, но и аналитики, администраторы и разработчики.

Гибкий API и возможность интеграции c различными сервисами – облачными платформами Google, Amazon Microsoft Azure, базами данных MySQL, PostgreSQL, Apache Hive, хранилищами HDFS, Amazon S3.

Всё это позволяет встроить платформу в корпоративные системы большинства компаний.

Недостатки

Неполная документация. Airflow — некоммерческий проект с открытым исходным кодом. Для таких систем часто не хватает ресурсов написать подробные инструкции. Это может усложнить внедрение платформы на проекте.

Требует навыков программирования. Большая часть работы Airflow проходит в интерфейсе командной строки. Хорошая новость — язык Python прост для освоения даже новичку.

Неявные зависимости. Это значит, что одни задачи могут зависеть от результатов выполнения других, но эти зависимости не явно указаны в DAG.
Предположим, у нас есть DAG с двумя задачами: «Загрузка данных» и «Обработка данных». Последняя должна зависеть от успешного выполнения «Загрузки данных». Если загрузка завершается с ошибкой, обработка не должна быть запущена. Но если эта зависимость не указана явно в DAG, обработка может быть запущена независимо от результата загрузки.
Чтобы избегать таких ситуаций, нужно дополнительно указывать зависимости между задачами в DAG. Это может отнимать время и усложнять работу с платформой.

Не подходит для потоковой обработки данных — информации, которая поступает в систему непрерывно, в режиме реального времени. Для этого используют другие инструменты — Apache Flink и Spark Structured Streaming.

Совет эксперта

Кирилл Дикалин

Для эффективной работы с Airflow делайте DAG’и простыми и модульными, разделяя задачи на отдельные операторы. Используйте переменные и подключения Airflow для безопасного хранения конфигураций и секретов. Чтобы минимизировать простои и избежать перекрывающихся выполнений, уделяйте внимание правильной настройке интервалов запуска и зависимостей между задачами в DAG’ах. Это повысит надёжность пайплайнов. Присоединяйтесь к сообществу open source проекта Airflow — улучшайте документацию, исправляйте ошибки или разрабатывайте новые функции. Это не только даст ценный опыт работы с реальным кодом, но и поможет познакомиться с опытными разработчиками и получить обратную связь по вашей работе.
Статью подготовили:

Кирилл Дикалин**

Яндекс Практикум
Автор и ревьювер на курсе DE, DE в SberData
Анатолий Бардуков
Яндекс Практикум
ML-инженер в службе качества поиска
Яндекс Практикум
Редактор
Анастасия Павлова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться

Успейте начать учебу в Практикуме до конца ноября со скидкой 20%

Mon Jul 15 2024 20:17:09 GMT+0300 (Moscow Standard Time)