在 Airflow 中具有多个依赖项的 ExternalTask​​Sensor

ExternalTaskSensor with multiple dependencies in Airflow

我有 dagA(cron 早上 5 点)和 dagB(cron 早上 6 点)。这两者都从某处摄取数据并转储到数据湖中。现在我希望 dagC(一个 ETL 作业)等待 dagA 和 dagB 完成。

我使用的是 ExternalTaskSensor 而不是 TriggerDagRunOperator,因为我认为摄取层不应触发下游的任何内容。我读过 questions 说我应该同时 运行 狗。

现在,这部分让我感到困惑,因为如果我要遵循这一点,这是否意味着我的所有气流作业将同时开始并且下游作业会一直戳到上游准备就绪?这是否也意味着 dagA 和 dagB 必须同时启动,即使它们彼此之间没有依赖关系?

dagA = DAG('dagA', description='dagA',
          schedule_interval='0 5 * * *',
          start_date=datetime(2017, 3, 20), catchup=False)
dagB = DAG('dagB', description='dagB',
          schedule_interval='0 6 * * *',
          start_date=datetime(2017, 3, 20), catchup=False)
dagC = DAG('dagC', description='dagC',
          schedule_interval=None,
          start_date=datetime(2017, 3, 20), catchup=False)

wait_for_dagA = ExternalTaskSensor(
    task_id='wait_for_dagA',
    external_dag_id='dagA',
    external_task_id=None,
    execution_delta=None,
    dag=dag)

wait_for_dagB = ExternalTaskSensor(
    task_id='wait_for_dagB',
    external_dag_id='dagB',
    external_task_id=None,
    execution_delta=None,
    dag=dag)

[wait_for_dagA, wait_for_dagB] >> etl_task 

我正在使用 airflow 1.10.3。

..does this mean all my airflow jobs will start at the same time and the downstream jobs keep poking until the upstream is ready?

  • Airflow 作业将仅在您需要时同时启动(但没有这样的要求)。
  • 下游作业(etl_task 及其下游依赖项)将仅在 wait_for_dagAwait_for_dagB 都成功 post 时启动。这些等待的任务将一直戳(传感器就是这样做的),直到相应的 DAG 成功。

Does that also mean dagA and dagB have to start at the same time even though they have no dependency between each other?

如上所述,这不是必需的。将 crons 替换为 DAGs 的整个想法是您不需要准确地为您的任务计时;相反,您可以灵活地强制它们 运行 一个接一个地执行,而不管不同的开始时间、执行时间和意外延迟。


提示

  • 但看看 mode param
  • 可配置的不同戳戳行为
  • 同时检查 ExternalTaskSensor
  • 中的 available params
  • 如果您没有在传感器中指定 external_task_id,请注意
  • 等陷阱