气流任务取决于另一个任务结果的许多分区

时间:2019-02-23 20:05:42

标签: airflow

我正在尝试掌握气流模型来安排我的ETL火花作业。

我想以声明的方式为我的工作建立执行图。

所以基本上我有以下内容:

  • spark作业“ ds1”产生数据集“ ds1”的分区,为了举例说明,我们假设该作业与其他作业没有依赖关系。
  • spark作业“ ds2”产生数据集“ ds2”的分区,该作业依赖于第一个作业,它接收“ ds1”的多个分区作为主要参数。

此作业汇总“ ds1”的分区,并从中输出一些业务结果。

所以基本上我有1个分区到许多分区依赖性。

我不能仅仅建立这样的dag:

ds1 >> ds2

我需要这样的东西:

ds1(partition_1) >> ds2
ds1(partition_2) >> ds2
ds1(partition_3) >> ds2

其中ds1使用分区参数进行参数化

这将起作用,但是用于不同分区的“ ds1”任务将始终重写自身的结果,因为它们计算的是同一件事。

要克服这种行为,我想我可以使用像这样的传感器:

ds1 >> sensor(partition_1) >> all_success
ds1 >> sensor(partition_2) >> all_success
ds1 >> sensor(partition_3) >> all_success
all_success >> ds2

这是在气流中做到这一点的唯一方法吗? 气流中惯用的吗?

我有使用Luigi的经验,可以很优雅地完成对Luigi的依赖,您可以说:

ds2 requires [ds1(partition_1), ds1(partition_2), ds1(partition_3)] 

此Luigi ds2任务将运行ds1丢失分区的计算,然后将计算ds2分区。看起来简单明了。 这样的行为可以在气流中完成吗? 也许气流中还有其他方法可以解决这种依赖性?

所以问题是气流在惯常情况下如何与1到多个分区相关性图一起工作?

我希望问题清楚。

感谢您的帮助!

0 个答案:

没有答案