Airflow 如何在dag中中途成功退出任务?

Airflow 如何在dag中中途成功退出任务?,airflow,apache-airflow,Airflow,Apache Airflow,我有一个dag检查FTP服务器上的文件(气流在单独的服务器上运行)。如果存在文件,则将文件移动到S3(我们在此处存档)。从那里,文件名被传递给Spark submit作业。spark作业将通过S3(不同服务器上的spark群集)处理该文件。我不确定是否需要多个DAG,但这里是流程。我想做的是,如果S3存储桶中存在文件,那么只运行Spark作业 我尝试使用S3传感器,但在满足超时标准后失败/超时,因此整个dag设置为失败 check_for_ftp_files -> move_files_t

我有一个dag检查FTP服务器上的文件(气流在单独的服务器上运行)。如果存在文件,则将文件移动到S3(我们在此处存档)。从那里,文件名被传递给Spark submit作业。spark作业将通过S3(不同服务器上的spark群集)处理该文件。我不确定是否需要多个DAG,但这里是流程。我想做的是,如果S3存储桶中存在文件,那么只运行Spark作业

我尝试使用S3传感器,但在满足超时标准后失败/超时,因此整个dag设置为失败

check_for_ftp_files -> move_files_to_s3 -> submit_job_to_spark -> archive_file_once_done

我只想在执行FTP检查的脚本之后运行所有操作,该脚本仅在一个或多个文件被移动到S3中时执行。您可以有两个不同的DAG。其中一个只有S3传感器并保持运行,比如说,每5分钟运行一次。如果找到该文件,将触发第二个DAG。第二个DAG将文件提交给S3,如果完成,则归档。您可以在第一个DAG中使用TriggerDagRunOperator进行触发。

他给出的答案将起作用。 另一个选项是使用传感器具有的“soft_fail”(软故障)参数(它是来自BaseSensorOperator的参数)。如果将此参数设置为True,则不会使任务失败,而是将跳过该任务,并将跳过分支中的所有后续任务


有关更多信息,请参阅。

如果找不到文件,它是否会退出并显示错误代码?因此有人需要重新触发作业,不是吗?第一个DAG(有两个任务,S3Sensor和TriggerDagRunOperator)可以计划每五分钟运行一次。这意味着传感器将每5分钟运行一次,如果它找到一个文件,则会触发第二个DAG。否则,它将不执行任何操作,并在5分钟后重新运行。它是否以错误代码退出并不重要(对于第一个DAG,不应将depends_on_pass设置为true)。