Apache AirFlow – один из самых популярных инструментов современного дата-инженера для планирования и оркестрации batch-процессов. Повторить успех этого фреймворка стремятся многие компании и Big Data энтузиасты: недавно мы рассказывали про ViewFlow от DataCamp, а также писали про Luigi, Argo, MLFlow и KubeFlow. Сегодня рассмотрим Dagster – еще одну альтернативу Apache AirFlow, которая позиционирует себя как оркестратор данных нового поколения.
Что такое Dagster и кому он нужен: еще один конкурент AirFlow или уникальный продукт для дата-инженерии
Несмотря на наличие альтернатив, в мире Big Data именно Apache AirFlow до сих пор является самым востребованным оркестратором ETL-процессов и конвейеров обработки данных. Однако, некоторые его недостатки и ограничения не позволяют покрыть все потребности современного дата-инженера. Поэтому выпускаются новые продукты как на базе самого AirFlow, так и для совместной работы с ним. Именно таким средством является Dagster – оркестратор данных для машинного обучения, аналитики и ETL. Разработанный в 2018 году и выложенный на Github для свободного использования под лицензией Apache 2.0, он уже завоевал доверие многих известных брендов: Prezi, Bestplace, Virta, Attest, Mapbox и других компаний [1].
Dagster позволяет определять конвейеры потока данных между повторно используемыми логическими компонентами, тестировать их локально и запускать в облачных сервисах (AWS, GCP Azure) или других распределенных системах. Благодаря интеграции с Apache AirFlow, Spark, Dask и Snowflake, с Dagster возможно строить сложные data pipeline’ы, в т.ч. по обмену данными между разными приложениями. А унифицированное представление конвейеров и ресурсов, которые они производят, позволяет Dagster работать с Python и SQL, за что его любят не только инженеры данных, но и Data Science специалисты.
За счет подключаемого исполнения Dagster один и тот же конвейер может выполняться внутри процесса на локальной файловой системе или в распределенной рабочей очереди в корпоративном озере данных. Веб-интерфейс Dagster упрощает работу с этим фреймворком и делает ее возможной из любого места.
Подобно большинству средств работы с большими данными, в т.ч. Apache Spark и AirFlow, Dagster моделирует зависимости данных между этапами в графике оркестровки и передает информации между ними, формируя DAG – направленный ациклический граф, вершинами которого являются задачи этого конвейера. Сами конвейеры строятся из общих, многократно используемых, настраиваемых компонентов обработки данных и инфраструктуры.
Менеджер активов отслеживает датасеты и модели Machine Learning, созданные конвейерами, позволяя их отлаживать и тестировать. А модель репозитория Dagster обеспечивает изоляцию кодовых баз, избавляя от ручного отслеживания зависимостей, когда конвейер имеет свои связи между пакетами и версию Python [2].
Таким образом, функциональные возможности и назначение Dagster очень близки к Apache AirFlow, хотя изначально этот фреймворк разрабатывался не как конкурент или альтернатива главному ETL-оркестратору, а как самостоятельный продукт. Но поскольку Dagster позволяет планировать и маршрутизировать распределенные вычисления в production-среде, его постоянно сравнивают с Airflow. Поэтому далее мы рассмотрим, чем отличаются эти 2 системы с точки зрения обработки каждого этапа жизненного цикла данных.
DAG, да не так: 5 отличий построения data pipeline’ов в AirFlow и Dagster
Основными процессами жизненного цикла конвейера обработки данных можно назвать следующие [3]:
- разработка и тестирование;
- развертывание и исполнение;
- мониторинг и контроль.
Dagster обеспечивает поддержку каждого из этих процессов, позволяя отлаживать и масштабировать приложения с возможностью самообслуживания широким кругом пользователей за счет наглядного представления DAG’ов в веб-GUI. Про Apache AirFlow можно сказать то же самое с учетом следующей разницы в подходе к концепции DAG и особенностям его реализации.
Параметры DAG и пользовательский интерфейс
Основная абстракция Airflow — это DAG (Directed Acyclic Graph) – набор задач, связанных через зависимости выполнения, без погружения в суть каждой задачи. Конвейеры Dagster — это графы из параметризуемых функций (solid’ов) с широким набором атрибутов, которые связаны между собой через типизируемые зависимости данных. При разработке конвейера Dagster, пользователь пишет чистые Python-функции, которые определяют вычисления и структуру графа. Как и в Airflow, реализация конкретного узла графа в Dagster включает то, что позволяет делать Python. Однако необходимо официально объявить входы и выходы узла, объявить требуемую конфигурацию и задать прочие настройки. Это повышает гибкость работы с задачами DAG’а и облегчает мониторинг конвейера в пользовательском интерфейсе. А вот веб-GUI AirFlow в этом отношении не слишком нагляден: при просмотре задачи там отображается только ее название и задача, от которой она зависит.
Тестирование конвейеров
Тестирование DAG’ов и задач Airflow требует настройки внешнего состояния, выполнения без параметров, а затем проверки внешнего состояния. Airflow не предоставляет API для выполнения подмножества DAG, а в Dagster тестирование или выполнение произвольных подмножеств графов возможно за счет гибкой настройки каждого узла.
Управление зависимостями
Несмотря на различные варианты решений, таких как взаимодействие задач через XCom и промежуточные компоненты, о чем мы рассказывали здесь, проблема управления зависимостями для Apache AirFlow до сих пор актуальна. В Airflow зависимости следует указать дважды: сперва явно на уровне выполнения, создав DAG, а затем неявно, вручную написав код, который извлекает результаты вычислений восходящего потока. В Dagster это делается 1 раз, предупреждая ошибки несоответствия между зависимостями выполнения и неявными зависимостями данных в коде. Кроме того, Dagster предоставляет встроенные компоненты и подключаемый пользователем API для распределения данных между файловыми системами, хранилищами объектов и данных, а также СУБД.
Привязка к инфраструктуре
DAG в Airflow состоит из операторов, например, SparkSubmitOperator, KubernetesPodOperator или PostgresOperator, которые часто относятся к конкретным развернутым инфраструктурным технологиям, что затрудняет перенос конвейера в другую production-среду. API Dagster позволяет разделить задачи между вычислениями и вводом-выводом, что облегчает развертывание конвейеров на разных платформах. DAG в Airflow объединяют структуру графа и политику планирования, что ограничивает возможность запуска DAG по двум разным расписаниям. На более глубоком уровне DAG не является отдельным артефактом, независимым от расписания. С точки зрения инфраструктуры, Airflow требует длительного процесса планировщика для регистрации и итерации в DAG локально, что затрудняет взаимодействие с ним. А если непрерывно работающий процесс планировщика часто запрашивает базу данных, то замедление увеличивается еще больше, о чем мы писали здесь. Следствием этих концептуальных и инфраструктурных проблем является отсутствие чистого, легкого API Python для выполнения DAG’ов или их подмножеств без запущенного процесса планировщика.
Гибкость Dagster позволяет выполнять вычисления без требований к инфраструктуре: для загрузки конвейеров или их выполнения не нужно никакой инфраструктуры, процесса планировщика или шага регистрации с отслеживанием состояния. Структура графа и расписания также не связаны друг с другом, содержимое компонентов DAG’а определяются независимо от конвейера.
Data Pipeline на Apache Airflow
Код курса
AIRF
Ближайшая дата курса
19 марта, 2025
Продолжительность
24 ак.часов
Стоимость обучения
72 000 руб.
В следующих статьях сравнивать Airflow с Dagster и рассмотрим, чем похожи и отличаются процессы развертывания и исполнения, а также мониторинга и контроля в этих фреймворках. А еще больше практических подробностей про использование Apache AirFlow для разработки сложных конвейеров аналитики больших данных с Hadoop и Spark вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
- https://dagster.io/
- https://github.com/dagster-io/dagster
- https://medium.com/dagster-io/moving-past-airflow-why-dagster-is-the-next-generation-data-orchestrator-e5d297447189