Почему следует избегать 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-инструмент, читайте в нашей новой статье.
Код курса
ADH-AIR
Ближайшая дата курса
Продолжительность
ак.часов
Стоимость обучения
0 руб.
Все подробности администрирования и эксплуатации Apache AirFlow для организации ETL/ELT-процессов в аналитике больших данных вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники