Managed Airflow(第 3 代) | Managed Airflow(第 2 代) | Managed Airflow(旧版第 1 代)
Managed Airflow 会将环境的存储桶中的特定文件夹同步到在环境中运行的 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 服务器的同步
Managed Airflow 会将 /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 和插件会附带其他文件,例如存储这些组件的测试的文件。这些文件会同步到工作器和调度器,并影响将这些文件复制到调度器、工作器和 Web 服务器所需的时间。
解决方案:请勿在
/dags和/plugins文件夹中存储任何其他不必要的文件。
工作器和调度器生成“Is a directory”或“Is a file”错误
出现此问题的原因是,对象在 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所在的文件夹,以避免重叠。