跳至内容

如何解决 Amazon MWAA 中调度器的常见问题?

2 分钟阅读
0

我想解决 Amazon Managed Workflows for Apache Airflow (Amazon MWAA) 中调度器的常见问题。

简短描述

调度器在无限循环中运行,监控所有任务和 DAG,并在任务实例的依赖项完成后调用任务实例。为了检查调度器的运行状况,Apache Airflow 会检查调度器运行状况端点。如果 scheduler_health_check_threshold 没有检测信号,则调度器处于不正常状态。scheduler_health_check_threshold 的默认值为 30 秒。当您配置 Amazon MWAA 环境时,可以修改该值。

如果调度器出现问题,则可能会收到以下错误消息或类似消息:

“The scheduler does not appear to be running.Last heartbeat was received (example time period) ago.The DAGs list may not update and new tasks will not be scheduled.”(调度器似乎没有运行。上次检测信号是在之前(示例时间段)收到的。DAG 列表可能不会更新,也不会安排新任务。)

出现此错误的常见原因是:

  • 网络问题
  • 不兼容的模块
  • 不堪重负的调度器
  • 损坏的 DAG

解决方法

网络问题

要解决可能由网络问题引起的调度器问题,请检查以下项目:

  • 检查安全组。检查其中一个安全组在端口 443 和端口 5432 上是否有自引用规则。其中一个端口必须具有此规则,安全组才能允许其上的流量。如果您在其中一个端口上没有自引用规则,请为您的 Amazon MWAA 安全组创建新的入站规则。然后,为所需端口创建自引用规则。另外,请检查您的网络访问控制列表(网络 ACL)是否不阻止流向端口 443 和端口 5432 的流量。
  • 检查 Amazon MWAA 端点。当您创建 Amazon MWAA 环境时,将会创建 Amazon Virtual Private Cloud (Amazon VPC) 接口端点。接口端点是为您的 Apache Airflow Web 服务器和兼容 Amazon Aurora PostgreSQL 的版本元数据数据库创建的。如果删除其中一个端点,则 Amazon MWAA 环境将损坏,您的调度器会收到错误。要解决此问题,请创建新的 Amazon MWAA 环境,因为无法重新创建这些端点。有关详细信息,请参阅在 Amazon MWAA 上管理您自己的 Amazon VPC 端点

不兼容的模块

如果您需要其他 Python 模块但尚未安装在 Amazon MWAA 环境中,请向 requirements.txt 中添加包含 Python 模块的约束文件。然后,您可以在预调配 Amazon MWAA 组件时安装模块。如果您为指定的 Apache Airflow 版本安装了不兼容的 Python 模块版本,则环境可能会中断并导致调度器错误。

要检查您的 Amazon MWAA 环境中是否存在不兼容的模块和版本,请检查 Worker 和调度器的 requirements_install 日志。检查是否出现以下错误或类似错误:

“ERROR: You need to upgrade the database.Please run "airflow db upgrade".”(错误:您需要升级数据库。请运行“airflow db upgrade”。)

“ERROR: Cannot install (example-package-name and example-version) because these package versions have conflicting dependencies.
The conflict is caused by:
The user requested (example-package-name and example-version).
The user requested (constraint-example-package-name and constraint-example-version).”(错误:无法安装(example-package-name 和 example-version),因为这些软件包版本具有冲突的依赖项。冲突是由以下原因造成的:用户请求的(example-package-name 和 example-version)。用户请求的(constraint-example-package-name 和 constraint-example-version)。)

要解决上述错误,请完成以下操作:

  • 如果您收到错误消息,指出要升级数据库,则说明您的元数据数据库已损坏。必须使用正确的模块版本创建新环境。
  • 如果您收到错误消息,指出您的软件包版本存在冲突的依赖关系,请使用正确的模块版本更新环境。

**注意:**从 Apache Airflow 版本 2.7.2 开始,约束文件必须包含在 requirements.txt 中。最佳做法是使用 aws-mwaa-local-runner 和正确的 Apache Airflow 版本来测试您的要求。有关详细信息,请参阅 GitHub 网站上的 aws-mwaa-local-runner

不堪重负的调度器

为确保您的调度器不会不堪重负,请检查调度器的 CPU 和内存利用率是否不超过 90%。最佳做法是将 .airflowignore 文件以及任何不创建 DAG 对象的文件夹和文件放在 DAG 文件夹中。这样能让调度器不解析这些文件和文件夹。有关详细信息,请参阅 Apache Airflow 网站上的 .airflowignore。此外,请确保您的调度器配置不超过最大值。例如,如果您将 AIRFLOW_SCHEDULER_PARSING_PROCESSES 设置为高于最大 vCPU 内核的值,则调度器性能下降或调度器中断。

损坏的 DAG

如果您的 DAG 损坏,则调度器会中断。要解决此问题,请删除所有新的或最近添加的 DAG。然后,逐一添加它们,直到找出错误的 DAG。要测试您的 DAG,请使用 aws-mwaa-local runner。有关详细信息,请参阅 GitHub 网站上的 aws-mwaa-local-runner

相关信息

VPC 安全组