我有一个按计划运行的DAG,并且其中的任务在路径中找到一个文件,对其进行处理,然后将该文件移动到存档文件夹中。
我没有等待时间表,而是手动触发了DAG。手动触发的DAG执行了它的第一个任务并“找到了要处理的新文件”,但是在开始第二个任务以加载该文件之前,DAG计划自动开始并开始处理同一文件。
计划的dag开始时,它暂停执行手动触发的DAG。 预定的DAG完成后,它又回到了从手动触发的DAG运行任务的状态,这导致了失败的状态,因为DAG将文件从源目录移到了归档文件中,并且手动预定的DAG开始处理“它认为是那里”归功于第一个任务的成功和信息。
所以: DAG手动触发 DAG手动触发的任务1已执行 DAG调度调用 DAG计划任务1已执行 DAG计划任务2已执行 DAG计划任务3已执行 DAG计划成功完成 DAG手动触发的任务2失败(由于在任务1中检测到计划任务2移动文件) 由于任务2失败,手动触发的DAG会跳过其他任务。 DAG手动触发失败完成
所以,我的问题是: 我该如何配置Airflow以使对同一DAG的调用以FIFO的方式执行,而不管DAG是由计划,手动还是触发器调用的?
答案 0 :(得分:0)
关于这个问题:
为什么Apache Airflow计划的DAG优先于手动 触发了DAG?
我不能说什么。但是看一下气流代码可能是个好主意。
关于您要完成的任务:
使用已安装文件夹(或类似文件夹)中的文件,我建议您要做的第一件事是将它们复制到另一个文件夹中,并说“ process folder”,以确保这些文件不会被“ others”所触及。
在我的项目中,我们处理一组视频,并使用{{ts_nodash}}默认变量生成与触发器相关的文件夹。