Как управлять зависимостями Python в Airflow?

На моей локальной машине я создал виртуальную среду и установил Airflow. Когда дагу или плагину требуется библиотека Python, я устанавливаю ее в тот же виртуальный файл.

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


person Srule    schedule 04.07.2019    source источник
comment
Кстати, если вам нужно сделать то же самое для ваших пользовательских библиотек, взгляните на airflow. apache.org/docs/stable/plugins.html ( astronomer.io/guides/airflow-importing-custom-hooks-operators )   -  person slesh    schedule 04.12.2019


Ответы (2)


В частности, для более крупных вариантов использования Airflow я бы рекомендовал использовать Airflow как способ организации задач на другом уровне абстракции, чтобы вы не управляли зависимостями со стороны Airflow.

Я бы рекомендовал взглянуть на DockerOperator или KubernetesPodOperator. С их помощью вы можете встраивать свои задачи Python в контейнеры Docker и запускать их с помощью Airflow. Таким образом, вам не нужно управлять зависимостями Python в Airflow, и вы не столкнетесь с аварийными сценариями, когда две DAG имеют конфликтующие зависимости. Однако это требует от вас знаний об управлении кластером Kubernetes.

person chris.mclennon    schedule 05.07.2019
comment
Я вижу проблему с этим, хотя. Теперь предположим, что вы упаковываете конвейер ETL в док-контейнер. Если это трехэтапный процесс, и один из них дает сбой, Airflow придется перезапустить весь процесс, а не только тот, который не прошел правильно? Или в вашей докеризированной задаче вы можете вызывать отдельные части вашего пайплайна? - person alex; 28.08.2020
comment
@alex Вам не обязательно упаковывать все три задачи в один вызов докера. Вы можете разделить их на три изображения или использовать одно изображение с тремя разными вызовами. Я согласен, лучше всего выполнять три задачи Airflow для трех этапов. - person chris.mclennon; 29.08.2020
comment
Согласитесь, это кажется лучшей практикой. По теме этой темы — можете ли вы пролить дополнительный свет на то, почему можно использовать KubernetesPodOperator вместо DockerOperator? Они оба кажутся хорошим способом контейнеризации вашего рабочего процесса. - person alex; 29.08.2020
comment
DockerOperator против KubernetesPodOperator действительно зависит от вашей базовой инфраструктуры. Короче говоря, DockerOperator запустит образ докера на узле, на котором живет рабочий процесс Airflow. Если использование ресурсов этого узла полностью израсходовано, ваш док-контейнер не сможет работать. Кластер Kubernetes — это способ управления кластером узлов для запуска контейнеров Docker. Таким образом, KubernetesPodOperator будет иметь целый кластер, доступный для запуска вашего контейнера Docker. Если вы используете большое количество машинных ресурсов, я бы рекомендовал KubernetesPodOperator. - person chris.mclennon; 30.08.2020

Вы можете увидеть airflow.operators.python_operator.PythonVirtualenvOperator об использовании в Dags, где вы используете PythonOperator.

Использование VirtualenvOperator вместо PythonOperator изолирует зависимости от Dag до Virtualenv, и вы можете хранить отдельные файлы требований.

Вы можете использовать комментарии в файле требований, чтобы отметить зависимости для Dag например,

package-one # Dag1.

... и когда вы удаляете требования Dag, grep с именем DAG, удалите, а затем удалите строки.

Таким образом, когда вы устанавливаете пакет для DAG, вам нужен процесс для комментирования имени Dag в вашем файле требований. Вы можете написать сценарий для выполнения этого.

person Oluwafemi Sule    schedule 05.07.2019
comment
Непрактично, если у вас большой проект с большим количеством пакетов. Virtualenv создается и уничтожается для каждого вызываемого вами VirtualenvOperator. - person Marco Fumagalli; 05.05.2020
comment
Кроме того, не загрязнят ли эти требования среду Airflow? - person Brylie Christopher Oxley; 08.09.2020
comment
@BrylieChristopherOxley Требования устанавливаются в виртуальную среду во временную папку, чтобы среда Airflow не загрязнялась. Вы можете прочитать здесь - person Oluwafemi Sule; 12.09.2020