在Airflow中,我们使用xcoms表示一个DAG已完成,而另一个DAG可以开始运行。例如。 DAG 1在12 AM运行,并在完成后发送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 AM,因此DAG#5无法从DAG#4读取。
有没有办法解决这个问题?到目前为止,唯一考虑的就是简单地提前安排DAG#4并将其睡眠一个小时,但这似乎不是一个好习惯。
答案 0 :(得分:0)
气流具有传感器的概念。在继续执行DAG之前,使用传感器来测试某些条件。在您的情况下,您可以使用ExternalTaskSensor:DAG 5将具有四个此类传感器,用于感测DAG 1、2、3和4的成功。在这种情况下,您根本不需要XCOM。
的更多信息