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文件夹中存储任何其他不必要的文件。
工作器和调度器生成“是目录”或“是文件”错误
出现此问题的原因是,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 所在的文件夹,以免发生重叠。