Apache Airflow или Apache Beam для обработки данных и планирования работы

Я пытаюсь дать полезную информацию, но я далек от того, чтобы быть инженером данных.

В настоящее время я использую pandas pythas для выполнения длинной серии преобразований для моих данных, которые содержат много входов (в настоящее время CSV и файлы excel). Выходы - это несколько файлов excel. Я хотел бы иметь возможность выполнять запланированные контролируемые пакетные задания с параллельным вычислением (я имею в виду не так последовательно, как то, что я делаю с пандами), один раз в месяц.

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

Ответы

Ответ 1

Apache Airflow не является механизмом обработки данных.

Airflow - это платформа для программного создания, планирования и мониторинга рабочих процессов.

Cloud Dataflow - это полностью управляемый сервис в Google Cloud, который можно использовать для обработки данных. Вы можете написать свой код потока данных, а затем использовать Airflow для планирования и мониторинга задания потока данных. Поток воздуха также позволяет вам повторить вашу работу, если она не удалась (количество попыток настраивается). Вы также можете настроить в Airflow, если хотите отправлять оповещения в Slack или по электронной почте, если ваш конвейер потока данных не работает.

Ответ 2

Другие ответы довольно технические и трудно понять. Раньше я был на вашем месте, поэтому я объясню просто.

Воздушный поток может сделать что угодно. Он имеет BashOperator и PythonOperator, что означает, что он может запускать любой скрипт bash или любой скрипт Python.
Это способ организации (настройка сложных DAG-протоколов данных), расписание, мониторинг, запуск повторных запусков конвейеров данных в удобном для просмотра и использовании пользовательском интерфейсе.
Кроме того, его легко настроить, и все в знакомом коде Python.
Проведение трубопроводов организованным способом (то есть с использованием Airflow) означает, что вы не тратите время на отладку беспорядка сценариев обработки данных повсюду.

Apache Beam - это оболочка для многих инфраструктур обработки данных (Spark, Flink и т.д.).
Цель состоит в том, чтобы вы просто изучали Beam и могли работать на нескольких backend (Beam runners).
Если вы знакомы с Keras и TensorFlow/Theano/Torch, связь между Keras и его внутренними компонентами аналогична взаимосвязи между Beam и его обработкой данных.

Cloud Cloud Cloud Cloud - один из бэкэндов для запуска Beam on. Они называют это бегун Dataflow (https://beam.apache.org/documentation/runners/dataflow/)

Новое предложение GCP, Cloud Composer, является управляемой реализацией Airflow как услугой.

Таким образом, вы можете:
- ручное управление реализацией воздушного потока
- ручная реализация Airflow, обработка данных на самом экземпляре (если ваши данные небольшие (или ваш экземпляр достаточно мощный), вы можете обрабатывать данные на машине, работающей с Airflow. Вот почему многие путают, если Airflow может обрабатывать данные или нет )
- управляемый Airflow в качестве сервиса (Cloud Composer), вызывающий задания в Cloud Dataflow

Мой личный опыт:
Воздушный поток является легким и не представляет трудностей для изучения (легко реализуется), вы должны использовать его для своих конвейеров данных, когда это возможно.
Кроме того, поскольку многие компании ищут опыт использования Airflow, если вы хотите быть инженером данных, вы, вероятно, должны его изучить

Ответ 3

Google, который получил:

caravel 1 марта 2017 года [-]

[author] Airflow не является механизмом потока данных, хотя вы можете использовать его для выполнения некоторых из них, но мы обычно откладываем выполнение преобразований данных с использованием/координации внешних движков (Spark, Hive, Cascading, Sqoop, PIG,...),

Мы работаем на более высоком уровне: оркестровка. Если бы мы начали использовать Apache Beam в Airbnb (и мы очень хорошо можем скоро!), Мы используем Airflow для планирования и запуска работы по пакетному пуску вместе с остальными нашими другими заданиями.

Источник: https://news.ycombinator.com/item?id=13767310

Ответ 4

Apache Airflow и Apache Beam на поверхности выглядят очень похоже. Оба они позволяют вам организовать набор шагов, которые обрабатывают ваши данные, и оба обеспечивают выполнение шагов в правильном порядке и удовлетворение их зависимостей. Оба позволяют визуализировать шаги и зависимости в виде ориентированного ациклического графа (DAG) в графическом интерфейсе.

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

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

Луч - это движок потока данных. Узлы группы обеспечения доступности баз данных формируют (возможно, ветвящийся) конвейер. Все узлы в группе обеспечения доступности баз данных активны одновременно, и они передают элементы данных от одного к другому, каждый из которых выполняет на нем некоторую обработку.

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

Воздушный поток управляет задачами, которые зависят друг от друга. Хотя эта зависимость может состоять из одной задачи, передающей данные следующей, это не является обязательным требованием. На самом деле Airflow даже не заботится о том, что делают задачи, ему просто нужно запустить их и посмотреть, закончились они или нет. Если задачам необходимо передавать данные друг другу, вам необходимо согласовать это самостоятельно, указав каждой задаче, где следует читать и записывать свои данные, например, путь к локальному файлу или веб-сервис. Задачи могут состоять из кода Python, но они также могут быть любой внешней программой или вызовом веб-службы.

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

В Airflow, если ваши задачи обрабатывают данные, один вызов задачи обычно выполняет некоторое преобразование во всем наборе данных. В Beam обработка данных является частью основных интерфейсов, поэтому она больше ничего не может сделать. Вызов шага Beam обычно обрабатывает один или несколько элементов данных, а не полный набор данных. Из-за этого Beam также поддерживает наборы данных неограниченной длины, с которыми Airflow изначально не справляется.

Другое отличие состоит в том, что Airflow сам по себе является фреймворком, но на самом деле Beam - это уровень абстракции. Лучевые конвейеры могут работать на Apache Spark, Apache Flink, Google Cloud Dataflow и других. Все они поддерживают более или менее похожую модель программирования. Кстати, Google также превратил Airflow в сервис под названием Google Cloud Compose.

* Поддержка Apache Spark для Python фактически реализуется путем запуска полного интерпретатора Python в подпроцессе, но это реализуется на уровне платформы.