Воздушный поток - Как заставить работника взять на себя все задачи по запуску? - PullRequest
0 голосов
/ 27 февраля 2019

В настоящее время я работаю с Airflow и Celery для обработки файлов.Работник должен загрузить файлы, обработать их и повторно загрузить их после.Мои DAGs хороши только с одним работником.Но когда я добавляю одну вещь усложняется.

Рабочие выполняют задачи так, как они доступны.Worker1 может взять на себя задачу «обработка загруженных файлов», но это был Worker2, который взял задачу «загрузка файлов», поэтому задача не удалась, потому что он не может обрабатывать файлы, которые не существуют.

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

1 Ответ

0 голосов
/ 01 марта 2019

В этом случае вы можете иметь переменную воздушного потока, чтобы сохранить имя всех ваших рабочих узлов.Например:

  • Переменная: worker_list
  • Значение: boxA, boxB, boxC

При запуске работника Airflow вы можете указать несколько очередей заданий,Например: airflow worker job_queue1,job_queue2 В вашем случае я буду запускать airflow worker af_<hostname>

В вашем коде DAG вам просто нужно получить эту переменную Airflow работника-списка, выбрать поле случайным образом, а затем поставить все ваши задания в очередь af_<random_selected_box> очередь

...