Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Cloud Composer 会将环境存储桶中的特定文件夹同步到环境中运行的 Airflow 组件。如需了解详情,请参阅存储在 Cloud Storage 中的数据。本页介绍了可能会中断同步过程的问题以及如何排查这些问题。
常见问题
以下部分介绍了一些常见文件同步问题的症状和可行修复措施。
处理 dags 和 plugins 文件夹中的大量 DAG 和插件
/dags
和 /plugins
文件夹的内容会从环境的存储桶同步到 Airflow 工作器和调度器的本地文件系统。
这些文件夹中存储的数据越多,执行同步所需的时间就越长。如需解决此类情况,请执行以下操作:
限制
/dags
和/plugins
文件夹中的文件数量。仅存储最少数量的必需文件。增加 Airflow 调度器和工作器可用的磁盘空间。
增加 Airflow 调度器和工作器的 CPU 和内存,以便更快地执行同步操作。
如果 DAG 数量非常多,请将 DAG 分成批次,将其压缩为 ZIP 归档文件,然后将这些归档文件部署到
/dags
文件夹中。这种方法可加快 DAG 同步过程。Airflow 组件会在处理 DAG 之前提取 ZIP 归档文件。以程序化方式生成 DAG 也是限制存储在
/dags
文件夹中的 DAG 文件数量的一种方法。请参阅 DAG 问题排查页面中的以编程方式生成的 DAG 部分,以避免在调度和执行以编程方式生成的 DAG 时遇到问题。
影响 DAG 和插件与调度器、工作器和 Web 服务器同步的反模式
Cloud Composer 会将 /dags
和 /plugins
文件夹的内容同步到调度器和工作器。/dags
和 /plugins
文件夹中的某些对象可能会阻止此同步正常运行或降低其运行速度。
/dags
文件夹会同步到调度器和工作器。此文件夹未同步到 Web 服务器。
/plugins
文件夹会同步到调度器、工作器和 Web 服务器。
您可能会遇到以下问题:
您上传了使用 [压缩转码][存储转码] 的 gzip 压缩文件,并将其上传到了
/dags
和/plugins
文件夹。如果您在gcloud storage cp
命令中使用--gzip-local-all
标志将数据上传到存储桶,通常会发生此错误。解决方案:删除使用压缩转码的对象,然后将其重新上传到存储桶。
其中一个对象的名称为“.”,此类对象不会同步到调度程序和工作器,并且可能会完全停止同步。
解决方案:重命名对象。
文件夹和 DAG Python 文件具有相同的名称,例如
a.py
。 在这种情况下,DAG 文件未正确同步到 Airflow 组件。解决方案:移除与 DAG Python 文件同名的文件夹。
/dags
或/plugins
文件夹中的某个对象在其名称末尾包含/
符号。此类对象可能会干扰同步过程,因为/
符号表示对象是文件夹,而不是文件。解决方案:从有问题的对象的名称中移除
/
符号。请勿在
/dags
和/plugins
文件夹中存储不必要的文件。有时,您实现的 DAG 和插件会附带其他文件,例如存储这些组件的测试的文件。这些文件会同步到工作器和调度器,并影响将这些文件复制到调度器、工作器和网络服务器所需的时间。
解决方案:请勿在
/dags
和/plugins
文件夹中存储任何其他不必要的文件。
调度器和工作器生成了“完成 [Errno 21] 是一个目录:‘/home/airflow/gcs/dags/...’”错误
出现此问题的原因是,对象在 Cloud Storage 中可能具有重叠的命名空间,而调度程序和工作器同时使用常规 Linux 文件系统。例如,您可以向环境的存储桶添加同名的文件夹和对象。当存储桶同步到环境的调度器和工作器时,系统会生成此错误,这可能会导致任务失败。
如需解决此问题,请确保环境的存储桶中没有重叠的命名空间。例如,如果 /dags/misc
(一个文件)和 /dags/misc/example_file.txt
(另一个文件)都在一个存储桶中,调度程序会生成错误。