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
文件夹中存储任何其他不必要的文件。
工作器和 DAG 处理器生成“是目录”或“是文件”错误
出现此问题的原因是,Cloud Storage 中的对象可能具有重叠的命名空间,而您环境的 Airflow 组件同时使用常规 Linux 文件系统。在 Cloud Storage 中,您可以向存储桶添加名称相同的文件夹和对象。当存储桶同步到环境的 Airflow 组件时,系统会生成错误:
- 如果先同步了对象,则不会同步相应文件夹的内容,并会生成
Is a file
错误。 - 如果先同步了文件夹,则不会同步对象,并会生成
Is a directory
错误。
示例:
Done [Errno 21] Is a directory: '/home/airflow/gcs/dags/...'
由于缺少文件,这两种错误都可能导致任务失败。在某些情况下,同步过程可能会中断,并且环境存储桶中的其他对象也不会同步。
解决方案:
如需解决此问题,请确保环境的存储桶中没有重叠的命名空间。
例如,如果 /dags/misc
(一个对象)和 /dags/misc/example_file.txt
(另一个对象)都在一个存储桶中,请重命名 misc
对象或 example_file.txt
所在的文件夹,以免发生重叠。