气流-如何让工人承担所有dag运行任务?

时间:2019-02-27 12:35:44

标签: celery airflow

我目前正在与Airflow和Celery一起处理文件。工作人员需要下载文件,进行处理并在之后重新上传文件。我的DAG仅一名工人就可以了。但是当我添加一件事时,事情就变得复杂了。

工作人员在可用时执行任务。 Worker1可以执行“处理下载的文件”任务,但是Worker2承担了“下载文件”任务,因此该任务失败了,因为它无法处理不存在的文件。

是否有一种方法可以向工作人员(或调度程序)指定DAG必须仅在一个工作人员上运行?我知道队列。但是我已经在使用它们。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您可以使用气流变量来保存所有工作节点名称。 例如:

  • 变量:worker_list
  • 值:boxA, boxB, boxC

运行Airflow工作程序时,可以指定多个作业队列。例如:airflow worker job_queue1,job_queue2 对于您的情况,我将运行airflow worker af_<hostname>

在DAG代码中,只需获取该worker_list Airflow变量,随机选择一个框,然后将所有作业排队到af_<random_selected_box>队列中