Airflow:如何获取一个任务的返回输出来设置下游任务运行的依赖关系?

gun*_*nit 2 airflow apache-airflow-xcom

我们有一个 kubernetes pod 操作符,它将输出一个 Python 字典,该字典将定义哪些更进一步的下游 kubernetes pod 操作符与它们的依赖项和环境变量一起运行,以传递给每个操作符。

我如何让这个 python 字典对象回到执行器的上下文(或者它是工作器的上下文?),以便气流可以产生下游 kubernetes 操作符?

我看过 BranchOperator 和 TriggerDagRunOperator 和 XCOM push/pull 和 Variable.get 和 Variable.set,但似乎没有什么工作。

y2k*_*ham 5

我们有一个 kubernetes pod 操作符,它会输出一个 Python 字典,该字典将定义运行哪些更进一步的下游 kubernetes pod 操作符

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

一个优雅的方法是ShortCircuitOperator在每个KubernetesPodOperator读取上游发布的XCom字典)之前附加一个,KubernetesPodOperator并确定是否继续下游任务。

编辑-1

实际上,一种更简洁的方法是在要跳过的任务中提出一个AirflowSkipException(而不是使用单独的方法ShortCircuitOperator来执行此操作)


我如何获得这个 python 字典......以便气流可以产生下游 kubernetes 操作员..

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

可以这样想:因为scheduler必须提前知道所有任务(它们的task_ids、trigger_rulespriority_weight等),以便能够在合适的时间来执行它们。如果任务只是不断动态出现,那么Airflow的调度程序将不得不变得类似于操作系统调度程序(!)。欲了解更多详情阅读EDIT-1部分回答