Управление зависимостями через ADCM

Обзор

Некоторые DAG Airflow требуют дополнительных Python-библиотек, которые не включены в базовое окружение. Эти библиотеки могут быть из публичного репозитория Python Package Index (PyPI), приватных репозиториев или локальных источников.

ADCM предоставляет централизованный способ управления зависимостями. Вы можете определить и обновить список необходимых Python-библиотек напрямую из интерфейса ADCM, используя конфигурационные параметры, доступные для сервиса Airflow. Все зависимости, добавленные таким образом, будут добавлены на всех хостах кластера.

Эта функция поддерживает:

  • добавление библиотек из публичных репозиториев PyPI (например, requests, pandas);

  • добавление библиотек из приватных или внутренних Python-пакетов, размещенных в аутентифицированных репозиториях;

  • доступ к репозиториям через прокси;

  • ограничение версий зависимостей.

Конфигурация Airflow в ADCM содержит редактируемые поля, которые соответствуют параметрам, используемым в pip install.

В этой статье описывается, как настроить управление зависимостями в Airflow через ADCM.

Определение зависимостей в ADCM

Рассмотрим DAG, имеющий следующие зависимости:

from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime
import requests (1)
import pandas as pd (2)
import my_private_module (3)
1 Python-пакет.
2 Python-пакет определенной версии.
3 Пакет из приватного репозитория.

Добавление Python-библиотеки

ADCM предоставляет поле Extra requirements в конфигурации Airflow, которое работает аналогично файлу requirements.txt для управления зависимостями.

Чтобы установить необходимые Python-пакеты для DAG через ADCM:

  1. На странице Clusters выберите нужный кластер.

  2. Перейдите на вкладку Services и нажмите на Airflow.

  3. Активируйте опцию Show advanced и разверните секцию Dependency Management.

  4. В поле Extra requirements укажите список пакетов в следующем формате: <package-name>==<version>. Например:

    requests
    pandas==2.2.2

    Если версия не указана, по умолчанию будет установлена последняя доступная. Дополнительную информацию об этом формате можно найти в статье Requirements File Format.

  5. Подтвердите изменения в конфигурации, нажав Save.

  6. В раскрывающемся меню Actions выберите Sync requirements и нажмите Run.

  7. В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение true, и нажмите Run.

Добавление библиотек из приватного репозитория

Если DAG используют библиотеку, размещенную в приватном репозитории, вы можете указать в ADCM хост репозитория и данные для аутентификации.

Чтобы установить необходимые Python-пакеты из приватного репозитория через ADCM:

  1. На странице Clusters выберите нужный кластер.

  2. Перейдите на вкладку Services и нажмите на Airflow.

  3. Активируйте опцию Show advanced и разверните секцию Dependency Management.

  4. В поле Extra requirements укажите список пакетов в следующем формате: <package-name>==<version>. Например:

    my-private-pkg==0.1.0
  5. Заполните следующие поля:

    • index-url — URL репозитория;

    • index-url-user — имя пользователя для аутентификации;

    • index-url-password — пароль для аутентификации.

  6. Подтвердите изменения в конфигурации, нажав Save.

  7. В раскрывающемся меню Actions выберите Sync requirements и нажмите Run.

  8. В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение true, и нажмите Run.

Дополнительно, если для доступа к публичным пакетам требуется прокси, укажите параметры прокси в следующих полях:

  • proxy — адрес прокси-сервера;

  • proxy-user — имя пользователя для аутентификации через прокси;

  • proxy-password — пароль для аутентификации через прокси.

Если прокси не поддерживает HTTPS, укажите IP-адрес хоста или пару вида <IP хоста>:<порт> в поле trusted-host.

Ограничение зависимостей

ADCM предоставляет возможность для управления версиями критически важных Python-пакетов с помощью файла ограничений (constraints file). Это позволяет предотвращать конфликты при добавлении новых зависимостей или случайные обновления ключевых компонентов, таких как Apache Airflow.

Файлы ограничений отличаются от файлов требований (requirements) тем, что они определяют допустимые для установки версии пакетов, но не устанавливают их автоматически.

Раздел конфигурации Dependency Management в Airflow включает следующие поля для управления ограничениями:

  • Constraints file — редактируемый список ограничений версий (задается пользователем);

  • Base constraints file — доступный только для чтения список ограничений, необходимых для корректной работы Airflow, который нельзя изменить с помощью Constraints file.

Чтобы ограничить версии пакетов через ADCM:

  1. На странице Clusters выберите нужный кластер.

  2. Перейдите на вкладку Services и нажмите на Airflow.

  3. Активируйте опцию Show advanced и разверните секцию Dependency Management.

  4. В поле Constraints file перечислите пакеты в следующем формате: <package-name>==<version>. Например:

    apache-airflow==2.10.5
    pandas==2.2.2
    requests<3.0.0
  5. Подтвердите изменения в конфигурации, нажав Save.

  6. В раскрывающемся меню Actions выберите Sync requirements и нажмите Run.

  7. В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение true, и нажмите Run.

При выполнении действия Sync requirements ADCM проверяет все зависимости на соответствие полному списку ограничений.

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

Примеры нарушений ограничений:

  • попытка установить пакет, требующий более высокую версию Apache Airflow, чем разрешено;

  • указание версии пакета, конфликтующей с базовыми ограничениями;

  • ручная установка несовместимых пакетов в виртуальной среде Airflow.

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

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней