Чтобы данные из корпоративных систем можно было анализировать, их нужно обработать. Обычно это происходит в три этапа: извлечение, трансформация и загрузка. Этот принцип называется ETL (Extract Transform Load). Чем больше данных и аналитических задач, тем больше ETL-процессов. Управлять ими вручную трудозатратно. Airflow берёт на себя часть процесса по управлению данными: администратор задаёт параметры и порядок выполнения задач, а всё остальное делает платформа. Airflow подходит не только для ETL-процессов, но и для автоматизации других задач. Например, создания и отправки отчётов, управления инфраструктурой.
Кому пригодится Airflow:
● Инженерам данных — для проектирования, разработки и обслуживания систем обработки данных. Эти специалисты отвечают за то, чтобы информация из баз данных, веб-серверов и файлов журналов корректно преобразовывалась и загружалась в хранилища данных. Инженеры предоставляют другим специалистам выгрузки из хранилищ, которые можно использовать для аналитических задач.
● Аналитикам и специалистам по Data Science — строить витрины данных, отчёты и готовить данные для машинного обучения.
● Разработчикам — автоматизировать загрузку данных для тестирования приложения, настраивать обмен информацией между базами данных или с внешними системами.
● Менеджерам проектов — для планирования и мониторинга процессов обработки данных.
На курсе «Инженер данных» студенты используют AirFlow для автоматизации ETL-процессов и работы с большими объёмами неструктурированной информации в аналитических базах данных. Обучение принесёт больше пользы, если есть опыт работы с Python — Airflow написан именно на этом языке. Также важно понимать базовый синтаксис, запросы и функции SQL — для создания, хранения и обработки данных.
Чтобы разобраться в 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, в котором инженер данных может следить за выполнением задач
1. DAG’и (DAGs) — ключевая сущность Airflow. Это скрипты на Python, которые описывают логику выполнения задач: какие должны быть выполнены, в каком порядке и как часто.
2. Задача (Task) — описывает, что делать. Например, выборку данных, анализ, запуск других систем. Каждая задача — это экземпляр оператора с определенными параметрами. Допустим, есть DAG для загрузки данных из базы. Можно создать задачу для выполнения оператора, который отправит SQL-запрос для загрузки данных. Она будет содержать информацию о том, какой SQL-запрос нужно выполнить, когда и в каком контексте.
3. Оператор (Operator) — класс Python, который определяет, что нужно сделать в рамках задачи. Есть операторы для выполнения скриптов Bash, кода Python, SQL-запросов. Например, чтобы выполнить скрипт Python для анализа данных, используют PythonOperator.
Преимущества
Открытый исходный код. У платформы активное сообщество разработчиков, которые постоянно её развивают.
Масштабируемость и отказоустойчивость. 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.
Совет эксперта
Кирилл Дикалин
Кирилл Дикалин**
Читать также: