气流ExternalTask​​Sensor不触发任务

时间:2020-08-19 18:48:11

标签: airflow

我正在尝试使用ExternalTask​​Sensor添加交叉dag依赖性,但无法使其正常工作。 Dag A具有schedule_interval=None,因为它没有固定的时间表,并由文件创建事件在外部触发。 Dag A完成后,Dag B应该执行。这是dag_a和dag_b的代码。

DAG A

default_args = {
    'depends_on_past': False,
    'start_date': datetime.today()-timedelta(1),
    'email_on_failure': True,
    'email_on_retry': False,
    'queue': 'default'
}

dag = DAG(
    'dag_a', default_args=default_args, schedule_interval=None)

dag_a = AWSBatchOperator(
    task_id='dag_a',
    job_name='dag_a',
    job_definition='dag_a',
    job_queue='MyAWSJobQueue',
    max_retries=10,
    aws_conn_id='aws_conn',
    region_name='us-east-1',
    dag=dag,
    parameters={},
    overrides={})

DAG B

default_args = {
    'depends_on_past': False,
    'start_date': datetime.today()-timedelta(1),
    'email_on_failure': True,
    'email_on_retry': False,
    'queue': 'default'
}

dag = DAG(
    'dag_b', default_args=default_args, schedule_interval=None)

dag_b = AWSBatchOperator(
    task_id='dag_b',
    job_name='dag_b',
    job_definition='dag_b',
    job_queue='MyAWSJobQueue',
    max_retries=10,
    aws_conn_id='aws_conn',
    region_name='us-east-1',
    dag=dag,
    parameters={},
    overrides={})

wait_for_dag_a = ExternalTaskSensor(
     task_id='wait_for_irr',
     external_dag_id='dag_a',
     external_task_id=None,
     execution_delta = timedelta(hours=1),
     dag=dag,
     timeout = 300)

dag_b.set_upstream(wait_for_dag_a)

我同时设置了schedule_interval=None和相同的start_date这两个dag。我甚至为dag_b添加了execution_delta = timedelta(hours=1),但dag_a已完成,但dag_b尚未触发。任何帮助表示赞赏。

我尝试使用有效的TriggerDagRunOperator,但不适合我的用例,因为dag_b最终将依赖于多个父dag。

1 个答案:

答案 0 :(得分:0)

我之前遇到过类似的问题,因此需要检查两件事,首先,我看不到DAG A和DAG B之间的任何时间增量,它们都使用默认的arg,因此您不应该给等待的任务一个execute_delta,对于气流触发,如果有多个父DAG,它就无法检测到DAG结束信号,因此我尝试给external_task_id赋一个值,例如'dag_a-done'而不是默认的'None',并且可以。还有一件事要提到,task_id通常不应包含下划线。 链接是外部传感器的源代码: https://airflow.apache.org/docs/stable/_modules/airflow/sensors/external_task_sensor.html 此外,还有一篇文章介绍了ExternalTask​​Sensors的工作方式: https://medium.com/@fninsiima/sensing-the-completion-of-external-airflow-tasks-827344d03142