gpt4 book ai didi

airflow - 在 Airflow 任务之间共享大的中间状态

转载 作者:行者123 更新时间:2023-12-04 08:02:48 25 4
gpt4 key购买 nike

我们有一个带有 Celery 执行器的 Airflow 部署。

我们的许多 DAG 需要对 BashOperator 中的某些文件进行本地处理步骤。或 PythonOperator .

但是,据我们了解,给定 DAG 的任务可能并不总是安排在同一台机器上。

到目前为止我收集的任务之间的状态共享选项:

  • 使用Local Executors - 这对一个团队来说可能就足够了,具体取决于负载,但可能无法扩展到更广泛的公司
  • 使用XCom - 这有大小限制吗?可能不适合大文件
  • 编写自定义运算符 对于需要在两者之间进行本地处理的每个任务组合。这种方法降低了任务的模块化,并且需要复制现有运算符(operator)的代码。
  • 使用 Celery 队列将 DAG 路由到同一工作人员 ( docs ) - 这个选项一开始似乎很有吸引力,但是为了避免将所有内容路由到一个执行器或制作一百万个队列,什么是设置它的合适方法?
  • 使用共享网络存储 在所有运行 executor 的机器中 - 似乎是额外的基础设施负担,但有可能。

  • 在 Airflow 中的任务之间共享大型中间状态(例如文件)的推荐方法是什么?

    最佳答案

    澄清一下:无论您如何设置 Airflow ,都只会有一个执行程序在运行。

  • 执行器与调度器在同一台机器上运行。
  • 目前(在撰写本文时当前是 Airflow 1.9.0)没有安全的方法来运行多个调度程序,因此只会有一个执行程序在运行。
  • 本地执行器与调度器在同一台机器上执行任务。
  • Celery Executor 只是将任务放入队列中以供 celery worker 处理。

  • 但是,您提出的问题确实适用于 celery worker 。如果你使用 Celery Executor,你可能会有多个 celery worker。

    使用网络共享存储解决了多个问题:
  • 每台工作机器看到相同的 dag,因为它们具有相同的 dags 文件夹
  • 运算符的结果可以存储在共享文件系统中
  • 调度器和webserver也可以共享dags文件夹,在不同的机器上运行

  • 我会使用网络存储,并将输出文件名写入 xcom。然后,当您需要输入前一个任务的输出时,您将从该任务的 Xcom 读取文件名并处理该文件。

    关于airflow - 在 Airflow 任务之间共享大的中间状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48755948/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com