Cloud composer импортирует пользовательский плагин во все существующие базы данных

#airflow #google-cloud-composer

#воздушный поток #google-cloud-composer

Вопрос:

Я использую Cloud Composer для планирования нескольких баз данных. Эти базы данных создаются динамически с использованием этого метода и в них используются пользовательские плагины.

Я хотел бы знать, как действовать при добавлении / изменении плагина, который касается всех баз данных (допустим, он добавляет новую задачу к каждой базе данных)?

Нужно ли при этом приостанавливать все запущенные базы данных?

Что я делал до сих пор при добавлении / изменении плагина, так это :

  • Загрузите плагины в plugins корзину кластера Composer (используя команду gcloud composer)
  • Выполните фиктивное обновление в конфигурации Airflow -> добавьте фиктивное значение в файл airflow.cfg (используя команды gcloud composer)

Я сделал это, чтобы принудительно приостановить базы данных, и как только обновление завершено, базы данных возобновляются, но с новыми плагинами и, следовательно, новыми задачами (или, если его нет в этом dagrun, тогда это следующий). Это бесполезно?

Спасибо, если вы можете помочь.

Ответ №1:

Как объяснено на схеме архитектуры, веб-сервер Airflow, на котором вы просматриваете свою базу данных и код плагина, выполняется в проекте клиента, управляемом Google, в то время как Airflow workers, которые фактически запускают вашу базу данных и код плагина, находятся непосредственно в вашем проекте.

Когда база данных / плагин DAG помещается в корзину Composer, веб-сервер Airflow (который подпадает под проект клиента) проверяет код и обновляет любые новые изменения в расписании в базе данных Airflow.

В то же время планировщик Airflow (в вашем проекте) запрашивает базу данных Airflow для запуска следующей базы данных и уведомляет работников Airflow о выполнении запланированной работы. Затем работники Airflow (в вашем проекте) извлекают код базы данных / плагина из корзины Composer и компилируют их для выполнения этой конкретной задачи.

Таким образом, любые обновления, внесенные в ваш код базы данных / плагина, считываются отдельно веб-сервером Airflow и работниками Airflow в разное время.

  • Если вы не видите свой новый код на веб-сервере Airflow, он все равно должен быть обнаружен рабочими, когда они получат свежий код при запуске новой задачи.

  • Поэтому вам не нужно перезапускать Composer, чтобы рабочие приняли изменения.

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

Существует два способа обновить веб-сервер Airflow, чтобы увидеть изменения кода плагина, если он не обновляется:

  1. Установите для reload_on_plugin_change свойства значение True в [webserver] разделе через вкладку «ПЕРЕОПРЕДЕЛЕНИЕ КОНФИГУРАЦИИ ВОЗДУШНОГО ПОТОКА» в консоли.

  2. ИЛИ вы можете специально добавить / удалить / обновить пакет PYPI через вкладку консоли «ПАКЕТЫ PYPI«. Изменения в пакете, отличном от PYPI, не приведут к перезапуску веб-сервера. Обратите внимание, что это также инициирует перезапуск всей среды Composer, который может занять ~ 20 минут.