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

时间:2017-06-24 02:39:42

标签: airflow apache-airflow

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

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

check_for_ftp_files -> move_files_to_s3 -> submit_job_to_spark -> archive_file_once_done

我只想在执行FTP检查的脚本之后运行所有内容,只有当一个或多个文件被移动到S3时。

2 个答案:

答案 0 :(得分:1)

您可以拥有2个不同的DAG。一个人只有S3传感器并且每隔5分钟就会继续运行。如果找到该文件,则会触发第二个DAG。第二个DAG将文件提交给S3并进行归档(如果已完成)。您可以在第一个DAG中使用TriggerDagRunOperator进行触发。

答案 1 :(得分:0)

他给出的答案将起作用。 另一种选择是使用传感器具有的“soft_fail”参数(它是BaseSensorOperator中的参数)。如果您将此参数设置为True,而不是使任务失败,它将跳过它,并且也将跳过分支中的所有后续任务。

有关详细信息,请参阅airflow code