云 Composer/Airflow 任务运行程序存储
Cloud Composer/Airflow Task Runner Storage
我习惯 运行 通过 AWS 数据管道进行管道传输,但正在熟悉 Airflow (Cloud Composer)。
在数据管道中我们会:
- 产生一个任务运行器,
- Bootstrap它,
- 工作,
- 杀死任务运行器。
我刚刚意识到我的气流运行器不是短暂的。我在 /tmp
中触摸了一个文件,在单独的 DagRun 中再次触摸了它,然后列出 /tmp
并找到了两个文件。我只期待我最近接触的那个。
这似乎意味着我需要注意有多少 "stuff" 被本地存储在运行器上。
我知道 GCS 使用 FUSE 安装 /data
文件夹,所以我默认将我的大量工作文件存储在那里,并将文件从那里移动到其他地方的最终存储桶,但是你如何处理这个? "best practice" 是什么?
感谢您的建议。
Cloud Composer 目前使用 CeleryExecutor,它配置处理任务实例执行的持久工作进程。正如您所发现的,您可以更改 Airflow worker(即 Kubernetes pods)的文件系统,它们确实会持续存在,直到 pod 为 restarted/replaced.
最佳实践明智的做法是,您应该将本地文件系统视为任务实例生命周期内的临时文件系统,但您不应期望它会为您清理。如果您有执行繁重 I/O 的任务,您应该在 /home/airflow/gcs
的 外部 执行它们,因为该路径是网络挂载的 (GCSFUSE),但如果有最终数据你要坚持,那就写到/data
.
我习惯 运行 通过 AWS 数据管道进行管道传输,但正在熟悉 Airflow (Cloud Composer)。
在数据管道中我们会:
- 产生一个任务运行器,
- Bootstrap它,
- 工作,
- 杀死任务运行器。
我刚刚意识到我的气流运行器不是短暂的。我在 /tmp
中触摸了一个文件,在单独的 DagRun 中再次触摸了它,然后列出 /tmp
并找到了两个文件。我只期待我最近接触的那个。
这似乎意味着我需要注意有多少 "stuff" 被本地存储在运行器上。
我知道 GCS 使用 FUSE 安装 /data
文件夹,所以我默认将我的大量工作文件存储在那里,并将文件从那里移动到其他地方的最终存储桶,但是你如何处理这个? "best practice" 是什么?
感谢您的建议。
Cloud Composer 目前使用 CeleryExecutor,它配置处理任务实例执行的持久工作进程。正如您所发现的,您可以更改 Airflow worker(即 Kubernetes pods)的文件系统,它们确实会持续存在,直到 pod 为 restarted/replaced.
最佳实践明智的做法是,您应该将本地文件系统视为任务实例生命周期内的临时文件系统,但您不应期望它会为您清理。如果您有执行繁重 I/O 的任务,您应该在 /home/airflow/gcs
的 外部 执行它们,因为该路径是网络挂载的 (GCSFUSE),但如果有最终数据你要坚持,那就写到/data
.