我目前正在与Airflow和Celery一起处理文件。工作人员需要下载文件,进行处理并在之后重新上传文件。我的DAG仅一名工人就可以了。但是当我添加一件事时,事情就变得复杂了。
工作人员在可用时执行任务。 Worker1可以执行“处理下载的文件”任务,但是Worker2承担了“下载文件”任务,因此该任务失败了,因为它无法处理不存在的文件。
是否有一种方法可以向工作人员(或调度程序)指定DAG必须仅在一个工作人员上运行?我知道队列。但是我已经在使用它们。
答案 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>
队列中