我们有一个kubernetes pod运算符,它将吐出一个python字典,该字典将定义要运行的其他下游kubernetes pod运算符及其依赖项和环境变量,并将其传递给每个运算符。
如何将这个python字典对象重新带回执行者的上下文(或者它是工作人员的上下文?),以便气流可以产生下游的kubernetes运算符?
我看过BranchOperator和TriggerDagRunOperator以及XCOM push / pull和Variable.get和Variable.set,但是似乎没有什么用。
答案 0 :(得分:2)
我们有一个kubernetes pod运算符,它将吐出一个python 将定义进一步的下游kubernetes pod的字典 运营商
这是可能的,尽管不是您尝试的方式。您必须在工作流程中已经拥有所有可能的KubernetesPodOperator
,然后跳过那些不需要运行的内容。
执行此操作的一种优雅方法是在每个KubernetesPodOperator
之前附加一个ShortCircuitOperator
,该读取XCom
( dictionary )由上游{{ 1}},并确定是否继续执行下游任务。
EDIT-1
实际上,更干净的方法是只在您要跳过的任务内raise an AirflowSkipException
(而不是使用单独的KubernetesPodOperator
来做到这一点)
我如何获得此python字典...以便气流可以产生 下游Kubernetes运营商..
不。您不能根据上游任务的输出动态产生新任务。
这样想:对于ShortCircuitOperator
,必须提前知道所有任务(它们的scheduler
,task_id
,trigger_rule
等),因此以便在适当的时机执行它们。如果任务只是保持动态,那么priority_weight
的调度程序必须类似于操作系统调度程序(!)。有关更多详细信息,请阅读this答案的 EDIT-1部分