Airflow仅基于先前运行的状态触发任务

6

有没有办法基于以前的任务运行状态触发下一个任务。 场景如下:

  • Task1 - m DAG中的第一个任务
  • Task2 - 仅在任务1成功运行时运行任务2
  • Task3 - 仅在任务2成功运行时运行任务3
  • Task4 - 仅在任务1运行超过10小时(SLA错过)时运行任务4

enter image description here

1个回答

2
您有多种选择:
  1. 使用触发规则,详见触发规则
  2. 使用on_failure_callback和on_success_callback定义任务失败/成功时的操作,详见此篇文章或BaseOperatorAPI参考文档中的定义(请查看参数->on_failure_callback,on_success_callback)。
  3. 如果您只想在任务失败或SLA未达标时发送邮件,并且此时不应执行其他任务,请定义:
    default_args = {'email': ['some_email_adress'],'email_on_failure': True"},Airflow将向定义的电子邮件地址发送包含错误/SLA未达标信息的电子邮件。

2
另外,BranchPythonOperator - tobi6
谢谢Chris。我没有提到我正在尝试发送一个Slack消息而不是电子邮件。我应该能够动态地发送这个信息作为"任务成功"、"任务失败"和"任务运行中(SLA未达标)"。如何捕获任务1的这3种状态? - mnk
最简单的默认失败和成功设置是在task1的下游有两个slack操作器,一个带有trigger_rule='all_success',另一个带有'all_failed'。现在我从未使用过SLA,所以我不知道如果任务错过了SLA会发生什么,或者airflow只会发送电子邮件。如果任务失败并且错过了SLA,您需要弄清楚如何获取失败是否是由于SLA错过引起的。如果任务在SLA被错过时失败,并且您从task_instance中找到了如何获取该信息的方法,则可以在失败的slack操作器消息中使用jinja模板。 - Christopher Beck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接