Планируем рабочие процессы вместе с Apache Airflow
Почему Apache Airflow?
Большинство процессов обработки данных строятся на определении набора «задач» для извлечения, анализа, преобразования, загрузки и хранения данных. Например, последовательность обработки данных может состоять из таких задач, как чтение логов из S3, создание задания Spark для извлечения соответствующих объектов, индексирование объектов с помощью Solr и обновление существующего индекса для расширения поиска. Чтобы автоматизировать процесс и запускать его еженедельно, вы можете использовать планировщик времени, например Cron, определяя рабочие процессы в Crontab. Это действительно отлично подходит для простых рабочих процессов, но все становится хуже, когда вы начинаете поддерживать рабочий процесс в крупных проектах, где между элементами существуют зависимости. Еще это усложняется, если вы ждете каких-то входных данных от сторонних разработчиков, или другие команды не могут начать свою работу, пока не завершатся ваши задачи.
Apache Airflow — это планировщик рабочего процесса, который помогает планировать сложные рабочие процессы и обеспечивает простой способ их поддержания.
Вот несколько причин использовать Apache Airflow:
- Открытый исходный код: после запуска в качестве внутреннего проекта Airbnb, Airflow естественным образом нуждался в сообществе. Это было основной причиной, почему он в конечном итоге стал проектом с открытым исходным кодом. В настоящее время поддерживается и управляется как инкубаторный проект на в Apache.
-
Веб-интерфейс: Airflow ставится с Flaskapp, который отслеживает все рабочие процессы и позволяет вам легко изменять, запускать или останавливать их. Вы также можете работать с командной строкой, но веб-интерфейс более интуитивно понятен.
- На основе Python: каждая часть конфигурации написана на языке Python, включая настройку расписаний и скриптов для их запуска. Это устраняет необходимость использовать JSON или XML конфигурационные файлы.
Давайте рассмотрим основные сущности, которые вам понадобятся, чтобы написать первый рабочий процесс в Apache Airflow.
Направленные ациклические графы DAG (Directed Acyclic Graphs)
В Apache Airflow для создания рабочих потоков используются направленные ациклические графы (DAG). DAG — это набор из задач, которые выстроены в определенную последовательность, и выполняющиеся по расписанию.
Например, DAG, который считывает данные из 3 источников независимо друг от друга. После этого мы запускаем задание Spark для соединения данных по ключу и записываем результат преобразования в Redshift.
Определение DAG позволяет планировщику понять, какие задачи могут быть запущены немедленно, а какие должны ждать завершения других задач. Задание Spark должно дождаться трех задач «чтения» и заполнить данные в S3 и HDFS.
Планировщик (Scheduler)
Планировщик — это мозг настройки рабочих процессов в Airflow. Для пользователя взаимодействие с планировщиком ограничивается предоставлением ему информации о различных задачах и когда они должны запускаться.
Операторы (Operators)
Операторы — это «рабочие», которые выполняют наши задачи. Рабочие процессы определяются путем создания группы DAG операторов. Каждый оператор выполняет определенную задачу, написанную в виде функции на Python или через shell-скрипты. Вы можете создавать собственные пользовательские операторы, расширяя класс BaseOperator и реализуя этот execute() метод.
Задачи (Tasks)
Задачи — это определяемые пользователем действия, выполняемые операторами. Они могут быть функциями в Python или внешними скриптами, которые вы можете легко вызвать. Задачи должны быть написаны так, чтобы независимо от того, сколько раз вы запускаете эту задачу, это должно привести к тому же результату для тех же входных параметров.
Важно: не путайте операторы и задачи. Задачи определяют «что запускать?», а операторы — «как запустить?». Например, функция на Python, которая считывает данные из S3 и записывает в базу данных — это задача. Метод, который вызывает эту функцию на Python в Airflow — это оператор. Airflow имеет встроенные операторы, которые вы можете использовать для общих задач.
Полный оригинал статьи вы можете посмотреть здесь: https://blog.insightdatascience.com