Apache AirFlow vs Spark в Databricks для оркестрации рабочих процессов

Apache Spark AirFlow дата-инженер примеры курсы обучение, анализ данных Spark, Spark дата-инженерия Apache AirFlow примеры курсы обучение, Spark Databrics AirFlow сравнение что лучше, оркестрация процессов с Apache Spark в Databricks и AirFlow примеры курсы обучение, обучение большим данным, курсы дата-инженер аналитик Big Data, Школа Больших Данных Учебный Центр Коммерсант

Чем отличается оркестрация ETL-процессов в Databricks и Apache AirFlow: принципы работы, достоинства и недостатки, а также что выбирать дата-инженеру для решения практических задач.

Apache AirFlow vs Spark в Databricks: сходства и отличия

Облачная платформа Databricks, основанная на Apache Spark, предлагает пользователям единую среду для создания, запуска и управления различными рабочими процессами, от анализа больших данных до ETL и машинного обучения. Apache AirFlow представляет собой Python-фреймворк с открытым исходным кодом для программного создания, планирования и мониторинга пакетных заданий. Чтобы понять, чем отличаются эти инструменты с точки зрения дата-инженерии, сперва кратко сравним их по следующим критериям в таблице, а затем рассмотрим особенно интересные отличия более подробно.

Критерий

Spark в Databricks

Apache AirFlow

Назначение

Анализ и обработка больших данных с использованием оптимизированного Apache Spark

Оркестрация и планирование рабочего процесса

Языковая поддержка

PySpark, Spark SQL, Scala, Java, R

Python, SQL, PySpark, Spark SQL

Управление зависимостями

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

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

Управление рабочим процессом

Базовое выполнение рабочего процесса с использованием сторонних инструментов для планирования и сложных зависимостей задач

Динамическое создание рабочих процессов, зависимости задач и расширенное планирование с ветвлением и повторными попытками

Вычислительная мощность

Специально разработан и оптимизирован для крупномасштабных операций высокопроизводительной обработки данных

Больше подходит для организации задач, а не для выполнения сложных вычислительных операций в распределенном режиме над большими объемами данных

Поддержка Spark

Встроенная поддержка Spark и выполнение заданий с высокой эффективностью

Необходимо подключение к внешнему кластеру Spark для выполнения заданий

Подключение к внешним сервисам

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

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

Интеграции с хранилищами данных и внешними сервисами

Интегрируется с облачными хранилищами объектов и ODBC/JDBC-базами данных

Интегрируется с сотнями провайдеров различных сервисов и хранилищ данных

Управление задачами и зависимостями

Ключевой концепцией AirFlow является DAG – Направленный ациклический граф, состояний из задач – операторов, описанных на Python. Будучи open-source продуктом, AirFlow постоянно развивается. Например, если добавить метод expand() к каждой функции DAG, можно создавать динамические задачи AirFlow для параллельной обработки данных. Такое динамическое сопоставление задач, о котором мы писали здесь, создает один экземпляр задачи для каждого входа. Таким образом, вместо того последовательного выполнения задач, они будут выполняться параллельно, что сократит время выполнения ETL-конвейера и улучшит видимость процесса для каждого набора данных. В Databricks вместо динамического сопоставления задач для создания нескольких экземпляров задач для каждого набора данных, приходиться использовать циклы for. Хотя это позволяет добиться цели, данные каждого набора обрабатываются последовательно, а не параллельно, что увеличивает время выполнения конвейера.

Поскольку Databricks является готовым продуктом конкретного поставщика, он имеет определенные ограничения. В частности, чтобы создать рабочий процесс Databricks, дата-инженеру придется создать отдельные блокноты для каждой задачи в рабочем процессе, а не использовать один скрипт. В отличие от AirFlow, рабочие процессы Databricks не поддерживают зависимости задач в одном блокноте. Чтобы исключить ситуацию нарушения хода выполнения ETL-конвейера Databricks, когда нижестоящая задача запустится до завершения выполнения вышестоящей задачи, дата-инженеру следует описать каждую задачу в отдельном блокноте. Затем можно установить зависимости между задачами, чтобы определить порядок их запуска.

После того, как все задачи были собраны в отдельные блокноты, их можно добавить в рабочий процесс Databricks, чтобы организовать полноценный конвейер данных. Дата-инженер делает это в GUI платформы Databricks, сперва создавая рабочий процесс, а потом добавляя в него каждую задачу вручную. При этом надо задать имя задачи и путь к блокноту, где она описана. Каждая задача автоматически связывается с предыдущей созданной задачей, поэтому нет необходимости явно задавать какие-либо зависимости. После создания всех задач можно запустить рабочий процесс, чтобы убедиться и отслеживать его в пользовательском интерфейсе Databricks Runs.

Благодаря упрощенному взаимодействию между задачами, еще одним преимуществом Apache AirFlow в сравнении с Databricks является отсутствие необходимости в сохранении промежуточных данных. Databricks не позволяет напрямую передавать наборы данных между задачами, т.е. в начале каждой задачи надо считывать данные из хранилища файлов Databricks и в конце сохранять их обратно.

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

Сравнение вычислительной мощности

С точки зрения вычислительной мощности Apache Airflow уступает Spark в Databricks, поскольку изначально Spark был разработан как распределенный движок для крупномасштабных операций высокопроизводительной обработки данных. Spark выполняет операции MapReduce в оперативной памяти и имеет множество специальных оптимизаций для их ускоренного проведения в кластерной среде. А Apache AirFlow является классическим оркестратором и больше подходит для организации задач, а не для выполнения сложных вычислительных операций в распределенном режиме над большими объемами данных.

Будучи основанным на Apache Spark, фреймворк Databricks оптимизирует процесс создания, запуска и управления рабочими процессами, ориентированными на этот вычислительный движок. Такая унификация полезна для пользователей, которым нужна согласованная интегрированная среда для управления Spark-приложениями. Однако, взаимодействие с другими службами немного неуклюже, поскольку все данные должны проходить через кластер Spark. Необходимо настроить кластер Databricks для каждой отдельной задачи в рабочем процессе. Открытый исходный код Apache AirFlow дает более широкие возможности настройки, позволяя создавать, планировать и контролировать рабочие процессы программно на Python. Это обеспечивает универсальность и гибкость, а также легко интегрируется с широким спектром инструментов в экосистеме. Однако вместе с гибкостью возникает необходимость в более практическом управлении, требующем от пользователей импорта необходимых пакетов и обработки зависимостей, а также владения Python.

Таким образом, выбор между Databricks и AirFlow для организации ETL-конвейеров зависит от типа выполняемых рабочих нагрузок. Для рабочих высоконагруженных процессов на основе Spark со сложной вычислительной логикой и большими объемами данных, Databricks будет отличным выбором. Но если конвейеры данных включают в себя несколько разных систем, работающих вместе, стоит присмотреться к AirFlow, что мы и рассмотрим далее.

Интеграция с внешними сервисами и хранилищами данных

Теперь рассмотрим, как AirFlow и Databricks подключаются к внешним сервисам. Хотя Databricks имеет набор коннекторов для внешних служб и пользовательский интерфейс для приема данных, у него нет интерфейса для экспорта данных или управления перемещением данных между внешними системами. Кроме того, поскольку Databricks работает в кластере Spark, дата-инженеру придется настроить кластер Spark так, чтобы удаленно взаимодействовать с внешними хранилищами и сервисами, например, AWS S3, Snowflake  и пр. Однако, даже после настройки  Databricks предполагает выполнение промежуточных операций. Например, вместо того, чтобы просто запустить операцию копирования непосредственно из S3 в Snowflake, Databricks требует фактической загрузки данных обратно из S3 и создания датафрейма Spark. И лишь после этого можно приступить к загрузке данных из Spark в Snowflake. Это существенно увеличивает время выполнения ETL-конвейера, особенно в случае последовательного выполнения подобной задачи для нескольких наборов данных.

Spark Databrics vs Apache AirFlow: versus или вместе?

Впрочем, вопрос Spark Databrics vs Apache AirFlow можно рассматривать не как противопоставление этих технологий, а с точки зрения совместного использования. Благодаря модульной структуре управления пакетами провайдеров, о чем мы писали здесь, AirFlow отлично справляется с управлением рабочими процессами Databricks в контексте более крупного конвейера данных с использованием пакета провайдера Airflow Databricks. Этот пакет представляет собой набор классов Python, которые позволяют использовать AirFlow для управления заданиями Databricks. Он предоставляет два оператора:

  • DatabricksRunNowOperator для запуска существующего задания Databricks;
  • DatabricksSubmitRunOperator для отправки нового задания в кластер Databricks.

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

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

Узнайте больше про использование Apache AirFlow  для дата-инженерии и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://www.astronomer.io/blog/comparing-data-orchestration-databricks-workflows-vs-apache-airflow-part-1/
  2. https://docs.databricks.com/en/index.html
Поиск по сайту