【问题标题】:Airflow: How to get the return output of one task to set the dependencies of the downstream tasks to run?Airflow:如何获取一个任务的返回输出来设置下游任务运行的依赖关系?
【发布时间】:2019-03-13 09:17:00
【问题描述】:

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

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

我查看了 BranchOperator 和 TriggerDagRunOperator 和 XCOM push/pull 以及 Variable.get 和 Variable.set,但似乎没有什么能奏效。

【问题讨论】:

    标签: airflow


    【解决方案1】:

    我们有一个 kubernetes pod 操作符,它会吐出一条 python 字典将定义哪个更下游的 kubernetes pod 运营商运行

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

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

    EDIT-1

    实际上,更简洁的方法是在您要跳过的任务中只使用raise an AirflowSkipException(而不是使用单独的ShortCircuitOperator 来执行此操作)


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

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

    这样想:对于scheduler,必须提前了解所有任务(他们的task_ids、trigger_rules、priority_weight 等),以便能够在何时执行它们正确的时间来了。如果任务只是动态地出现,那么Airflow 的调度程序将不得不变得类似于操作系统调度程序(!)。有关详细信息,请阅读this 答案的 EDIT-1 部分

    【讨论】:

      猜你喜欢
      • 2019-02-22
      • 2023-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多