#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, чтобы увидеть изменения кода плагина, если он не обновляется:
-
Установите для
reload_on_plugin_change
свойства значениеTrue
в[webserver]
разделе через вкладку «ПЕРЕОПРЕДЕЛЕНИЕ КОНФИГУРАЦИИ ВОЗДУШНОГО ПОТОКА» в консоли. -
ИЛИ вы можете специально добавить / удалить / обновить пакет PYPI через вкладку консоли «ПАКЕТЫ PYPI«. Изменения в пакете, отличном от PYPI, не приведут к перезапуску веб-сервера. Обратите внимание, что это также инициирует перезапуск всей среды Composer, который может занять ~ 20 минут.