【问题标题】:Airflow: Pull XCom from DAG with a future start date?Airflow:从 DAG 中拉出 XCom 并确定未来的开始日期?
【发布时间】:2020-06-10 22:38:31
【问题描述】:

在 Airflow 中,我们使用 xcoms 表示一个 DAG 已完成,另一个 DAG 可以开始运行。例如。 DAG 1 在上午 12 点运行,并在完成后发送一个 xcom。 DAG 2 从 DAG 1 读取 xcom。

使用它的一个限制是,根据文档——xcom 只能从执行日期较早的 DAG 中读取,但不能从未来执行日期的 DAG 中读取。 https://airflow.apache.org/docs/stable/_modules/airflow/models/xcom.html

举个例子,假设我有 4 个 DAGS、DAG #1、#2、#3、#4,它们都在做某事。然后我有 DAG #5,它可以并行运行多个作业。 DAG#5 出于不同的原因依赖于 DAGS #1-4,并且对它们中的每一个都有单独的检查。 DAGS 安排如下:

DAG #1:上午 12 点 DAG #2:上午 12 点 DAG #3:上午 12 点 DAG #4:凌晨 2 点 DAG #5:凌晨 1 点

DAG #5 有 4 个任务,它们基本上利用airflow.models.xcom.get_one 方法从 DAGS#1-4 读取 XCcom。但由于 DAG #4 的开始时间是凌晨 2 点,因此 DAG #5 无法从 DAG #4 中读取。

有没有办法解决这个问题?到目前为止,唯一考虑的就是提前安排 DAG #4 并让它休眠一个小时,但这似乎不是一个好的做法。

【问题讨论】:

标签: airflow


【解决方案1】:

气流有一个传感器的概念。在 DAG 执行继续之前,传感器用于测试某些条件。在您的情况下,您可以使用ExternalTaskSensor:DAG 5 将有四个这样的传感器感应 DAG 1、2、3 和 4 的成功。在这种情况下,您根本不需要 XCOM。

更多关于cross-DAG dependencies.的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多