气流:如何获取一项任务的返回输出以设置要运行的下游任务的依存关系?

时间:2019-03-12 22:19:16

标签: airflow apache-airflow-xcom

我们有一个kubernetes pod运算符,它将吐出一个python字典,该字典将定义要运行的其他下游kubernetes pod运算符及其依赖项和环境变量,并将其传递给每个运算符。

如何将这个python字典对象重新带回执行者的上下文(或者它是工作人员的上下文?),以便气流可以产生下游的kubernetes运算符?

我看过BranchOperator和TriggerDagRunOperator以及XCOM push / pull和Variable.get和Variable.set,但是似乎没有什么用。

1 个答案:

答案 0 :(得分:2)

  

我们有一个kubernetes pod运算符,它将吐出一个python   将定义进一步的下游kubernetes pod的字典   运营商

这是可能的,尽管不是您尝试的方式。您必须在工作流程中已经拥有所有可能的KubernetesPodOperator ,然后跳过那些不需要运行的内容

执行此操作的一种优雅方法是在每个KubernetesPodOperator之前附加一个ShortCircuitOperator,该读取XCom dictionary )由上游{{ 1}},并确定是否继续执行下游任务。

EDIT-1

实际上,更干净的方法是只在您要跳过的任务内raise an AirflowSkipException(而不是使用单独的KubernetesPodOperator来做到这一点)


  

我如何获得此python字典...以便气流可以产生   下游Kubernetes运营商..

不。您不能根据上游任务的输出动态产生新任务

这样想:对于ShortCircuitOperator,必须提前知道所有任务(它们的schedulertask_idtrigger_rule等),因此以便在适当的时机执行它们。如果任务只是保持动态,那么priority_weight的调度程序必须类似于操作系统调度程序(!)。有关更多详细信息,请阅读this答案的 EDIT-1部分