Автосоздание CLI в Apache Airflow с Python Fire вместо Python-оператора

Автор Категория ,
Автосоздание CLI в Apache Airflow с Python Fire вместо Python-оператора

Почему следует избегать PythonOperator в конвейере обработки пакетных данных на Apache Airflow и что использовать вместо этого оператора для описания задач DAG. Когда лаконичный CLI лучше наглядного GUI, где и как применять библиотеку Python Fire для оркестрации, а также планирования запуска batch-заданий.

Зачем нам CLI или что не так с PythonOperator в Apache Airflow

Apache Airflow востребован у современных дата-инженеров благодаря возможностям декларативного и программного определения сложных рабочих процессов, а также их запуска по расписанию в рамках единой платформы с открытым исходным кодом. При этом отдельные задания могут быть отправлены и выполнены практически в любом месте с помощью богатой экосистемы операторов, которая включает сами рабочие узлы Airflow и готовые операторы для решения различных задач. В числе операторов есть самый простой PythonOperator, который, с одной стороны, является универсальным. Но, с другой стороны, его использование может стать причиной проблемы, когда задачи конкурируют друг с другом за ресурсы, что приводит к замедлению кластера. Также возможны конфликты зависимостей, установленных на разных рабочих узлах. Наконец, весь код должен быть развернут в Airflow, что затрудняет настройку единого конвейера развертывания для каждой ML-модели или цепочки взаимосвязанных заданий по обработки данных.

Упаковка моделей в Docker-контейнеры поможет обойти эту проблему, но взаимодействие с этими контейнерами из DAG, где есть динамические входные данные, является сложным и требует программирования в командной строке (CLI, Command Line Interface). Поэтому на практике дата-инженеры часто выбирают PythonOperator хотя вызвать функцию Python из командной строки не просто.

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

  • задачи обучения или логического вывода могут потреблять много ресурсов и истощать кластер;
  • логика подключения к уровням хранения фичей и моделей должна быть тесно связана с DAG. Это повышает связанность разных программных модулей, усложняет их и приводит к т.н. «спагетти-коду».

Если поместить ML-модель в Docker-контейнер, можно применить оператор, который запускает рабочий процесс в вычислительном сервисе типа Kubernetes, что мы рассматриваем здесь, или AWS Batch. При этом придется передавать параметры времени выполнения в контейнер через переменную среды или CLI, т.е. запрограммировать это, создав собственный интерфейс. Однако, создание собственного интерфейса с корректной обработкой ошибок – не самая тривиальная задача для дата-инженера или ML-специалиста. На помощь приходит библиотека Python Fire, которую мы рассмотрим далее.

Что такое Python Fire и как она работает

Библиотека Python Fire превращает любой объект Python (функцию, класс и пр.) в интуитивно понятный параметризованный интерфейс командной строки с помощью одной строки кода, упрощая обращение к рабочим процессам Airflow. Помимо того, что эта библиотека позволяет автоматически создать CLI-интерфейс из абсолютно любого объекта Python, она полезна для разработки и отладки кода:

  • помогает исследовать существующий код или превращать чужой код в CLI;
  • упрощает переход между Bash и Python;
  • упрощает использование интерактивного интерпретатора Python REPL, настраивая эту командную оболочку для ввода и выполнения Python-кода с уже импортированными и созданными модулями и переменными.

Таким образом, автоматически создавая надежный CLI-интерфейс для Python-объектов, библиотека Python Fire значительно снижает барьер для аутсорсинга вычислений, обеспечивая Apache Airflow наиболее эффективным образом делать то, что у него получается лучше всего – запускать пакетные процессы на выполнение.

О том, как компания Astronomer, которая занимается развитием и коммерциализацией Apache AirFlow, разработала и опубликовала свой CLI-инструмент, читайте в нашей новой статье.

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

Источники

  1. https://betterprogramming.pub/a-simple-airflow-design-pattern-to-avoid-a-cardinal-sin-cebeafd19a99
  2. https://github.com/google/python-fire