如何检查任务1是否失败然后在气流中运行任务2?

时间:2018-04-17 06:15:25

标签: airflow

如何检查任务1失败的任务失败然后运行任务2,就像if else条件一样。

我想运行依赖任务。

Task1失败然后如何在条件如if1 ==失败的情况下获取该错误日志然后运行task2和task3。我试过SSHHOOK,但我正在寻找一个简单的解决方案。

  with DAG(
    'airflow',
    catchup=False,
    default_args={
        'owner': 'abc',
    'start_date': datetime(2018, 4, 17),
        'schedule_interval':None,
        'depends_on_past': False,
    },   
) as dag:
    task_1 = PythonOperator(
        task_id='task_1', 
        python_callable=do(),
    )
    task_2 = PythonOperator(
        task_id='task_2',
        python_callable=do(),
    )
    task_3 = PythonOperator(
        task_id='task_3',
        python_callable=do()

    task_3.set_upstream(task_2)
    task_2.set_upstream(task_1)

2 个答案:

答案 0 :(得分:5)

由于没有代码示例,我必须假设您的DAG可能是什么样子以及您想要做什么。另外,我不明白你为什么要使用SSHHook,但是没有代码示例。所以我们走了:

创建错误任务

def t2_error_task(context):

    instance = context['task_instance']
    do_stuff()

创建任务

t1_task = PythonOperator(
    task_id='my_operator_t1',
    python_callable=do_python_stuff,
    on_failure_callback=t2_error_task,
    dag=dag
)

t3_task_success = PythonOperator(
    task_id='my_operator_t3',
    python_callable=do_python_stuff_success,
    dag=dag
)

然后在t1的上游设置t3:

t1_task >> t3_task_success 

答案 1 :(得分:2)

在您的DAG拓扑中明确的一个解决方案是mkake task_1写一个XCOM来标记它的成功或失败,然后创建一个BranchPythonOperator来读取它XCOM并根据它决定是否应执行task_2