故障排除: DAGs、Apache Airflow v1 中的操作员、连接和其他问题 - Amazon Managed Workflows for Apache Airflow
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

故障排除: DAGs、Apache Airflow v1 中的操作员、连接和其他问题

本页的主题包含 Apache Airflow v1.10.12 Python 依赖项、自定义插件、操作员、连接 DAGs、任务以及您在适用于 Apache Airflow 的亚马逊托管工作流程环境中可能遇到的 Web 服务器问题的解决方案。

更新 requirements.txt

以下主题描述了您在更新 requirements.txt 时可能收到的错误。

添加 apache-airflow-providers-amazon 会导致我的环境出现故障

apache-airflow-providers-xyz 仅与 Apache Airflow v2 兼容。apache-airflow-backport-providers-xyz 与 Apache Airflow 1.10.12 兼容。

DAG 损坏

以下主题描述了您在运行时可能收到的错误 DAGs。

我在使用 Amazon DynamoDB 运算符时收到了“DAG 损坏”的错误

我们建议您完成以下步骤:

  1. 使用 on 在本地测试你的 DAGs自定义插件和 Python 依赖关系 GitHub。aws-mwaa-local-runner

  2. 将下列程序包引用添加到 requirements.txt 文件中。

    boto
  3. 探索在requirements.txt文件中指定 Python 依赖关系的方法,请参阅在 requirements.txt 中管理 Python 依赖项

我收到了“DAG 损坏:没有名为 psycopg2 的模块”的错误

我们建议您完成以下步骤:

  1. 使用 on 在本地测试你的 DAGs自定义插件和 Python 依赖关系 GitHub。aws-mwaa-local-runner

  2. 将以下内容添加到您 requirements.txt 文件的 Apache Airflow 版本中。例如:

    apache-airflow[postgres]==1.10.12
  3. 探索在requirements.txt文件中指定 Python 依赖关系的方法,请参阅在 requirements.txt 中管理 Python 依赖项

我在使用 Slack 运算符时收到了“DAG 损坏”的错误

我们建议您完成以下步骤:

  1. 使用 on 在本地测试你的 DAGs自定义插件和 Python 依赖关系 GitHub。aws-mwaa-local-runner

  2. 将以下程序包添加到 requirements.txt 文件并指定 Apache Airflow 版本。例如:

    apache-airflow[slack]==1.10.12
  3. 探索在requirements.txt文件中指定 Python 依赖关系的方法,请参阅在 requirements.txt 中管理 Python 依赖项

我在安装时收到了各种错误 Google/GCP/BigQuery

Amazon MWAA 使用 Amazon Linux,它需要特定版本的 Cython 和密码库。我们建议您完成以下步骤:

  1. 使用 on 在本地测试你的 DAGs自定义插件和 Python 依赖关系 GitHub。aws-mwaa-local-runner

  2. 将下列程序包引用添加到 requirements.txt 文件中。

    grpcio==1.27.2 cython==0.29.21 pandas-gbq==0.13.3 cryptography==3.3.2 apache-airflow-backport-providers-amazon[google]
  3. 如果您不使用向后移植提供程序,则可以使用:

    grpcio==1.27.2 cython==0.29.21 pandas-gbq==0.13.3 cryptography==3.3.2 apache-airflow[gcp]==1.10.12
  4. 探索在requirements.txt文件中指定 Python 依赖关系的方法,请参阅在 requirements.txt 中管理 Python 依赖项

我收到了“DAG 损坏:没有名为 Cython 的模块”的错误

Amazon MWAA 使用 Amazon Linux,它需要特定版本的 Cython。我们建议您完成以下步骤:

  1. 使用 on 在本地测试你的 DAGs自定义插件和 Python 依赖关系 GitHub。aws-mwaa-local-runner

  2. 将下列程序包引用添加到 requirements.txt 文件中。

    cython==0.29.21
  3. Cython 库有各种必需的 pip 依赖项版本。例如,使用 awswrangler==2.4.0 需要 pyarrow<3.1.0,>=2.0.0,因此 pip3 会尝试安装 pyarrow==3.0.0,这会导致“DAG 损坏”错误。我们建议明确指定可接受的最旧版本。例如,如果您在 awswrangler==2.4.0 之前指定 pyarrow==2.0.0 的最小值,则错误消失,并且 requirements.txt 安装正确。最终要求如下所示:

    cython==0.29.21 pyarrow==2.0.0 awswrangler==2.4.0
  4. 探索在requirements.txt文件中指定 Python 依赖关系的方法,请参阅在 requirements.txt 中管理 Python 依赖项

运算符

以下主题描述了您在使用运算符时可能收到的错误。

我在使用 BigQuery 操作员时遇到了错误

Amazon MWAA 不支持带有 UI 扩展的运算符。我们建议您完成以下步骤:

  1. 使用 on 在本地测试你的 DAGs自定义插件和 Python 依赖关系 GitHub。aws-mwaa-local-runner

  2. 解决方法是在导入问题运算符 <operator name>.operator_extra_links = None 后,在 DAG 中添加一行进行设置,从而覆盖扩展名。例如:

    from airflow.contrib.operators.bigquery_operator import BigQueryOperator BigQueryOperator.operator_extra_links = None
  3. DAGs 通过将上述内容添加到插件中,您可以将这种方法用于所有人。有关示例,请参阅为 Apache Airflow 创建自定义插件 PythonVirtualenvOperator

连接

以下主题描述了在使用 Apache Airflow 连接或其他数据库时可能收到的错误。 Amazon

我无法连接 Snowflake

我们建议您完成以下步骤:

  1. 使用 on 在本地测试你的 DAGs自定义插件和 Python 依赖关系 GitHub。aws-mwaa-local-runner

  2. 将以下条目添加到适合环境的 requirements.txt 中。

    asn1crypto == 0.24.0 snowflake-connector-python == 1.7.2
  3. 将以下导入添加至 DAG:

    from airflow.contrib.hooks.snowflake_hook import SnowflakeHook from airflow.contrib.operators.snowflake_operator import SnowflakeOperator

确保 Apache Airflow 连接对象包含以下键值对:

  1. 连接 ID:snowflake_conn

  2. 连接类型:Snowflake

  3. 主机:<my account>.<my region if not us-west-2>.snowflakecomputing.com

  4. Schema:<my schema>

  5. 登录:<my user name>

  6. 密码:********

  7. 端口:<port, if any>

  8. 附加依赖项:

    { "account": "<my account>", "warehouse": "<my warehouse>", "database": "<my database>", "region": "<my region if not using us-west-2 otherwise omit this line>" }

例如:

>>> import json >>> from airflow.models.connection import Connection >>> myconn = Connection( ... conn_id='snowflake_conn', ... conn_type='Snowflake', ... host='123456789012.us-east-1.snowflakecomputing.com', ... schema='YOUR_SCHEMA' ... login='YOUR_USERNAME', ... password='YOUR_PASSWORD', ... port='YOUR_PORT' ... extra=json.dumps(dict(account='123456789012', warehouse='YOUR_WAREHOUSE', database='YOUR_DB_OPTION', region='us-east-1')), ... )

我无法连接 Secrets Manager

我们建议您完成以下步骤:

  1. 了解如何为 Apache Airflow 连接和变量创建密钥,请参阅 使用密钥配置 Apache Airflow 连接 Amazon Secrets Manager

  2. 要了解如何使用 Apache Airflow 变量 (test-variable) 的密钥,请参阅 在 Apache Airfl Amazon Secrets Manager ow 变量中使用密钥

  3. 要了解如何使用密钥进行 Apache Airflow 连接 (myconn),请参阅 使用密钥进行 Apach Amazon Secrets Manager e Airflow 连接

我无法通过“<DB-identifier-name>.cluster-id.<region>.rds.amazonaws.com”连接到我的 MySQL 服务器。

Amazon MWAA 的安全组和 RDS 安全组需要一条入口规则来允许相互之间的流量。我们建议您完成以下步骤:

  1. 修改 RDS 安全组以允许来自 Amazon MWAA 的 VPC 安全组的所有流量。

  2. 修改 Amazon MWAA 的 VPC 安全组以允许来自 RDS 安全组的所有流量。

  3. 再次重新运行任务,通过检查日志中的 Apache Airflow 日志来验证 SQL 查询是否成功。 CloudWatch

Web 服务器

以下主题描述了您在 Amazon MWAA 上的 Apache Airflow Web 服务器上可能收到的错误。

我正在使用 BigQueryOperator ,它导致我的 Web 服务器崩溃

我们建议您完成以下步骤:

  1. 诸如 BigQueryOperatorQuboleOperator 等 Apache Airflow 运算符包含 operator_extra_links,可能会导致 Apache Airflow Web 服务器崩溃。这些运算符试图将代码加载到 Web 服务器,但出于安全考虑,这是不允许的。我们建议通过在导入语句之后添加以下代码来修补 DAG 中的运算符:

    BigQueryOperator.operator_extra_links = None
  2. 使用 on 在本地测试你的 DAGs自定义插件和 Python 依赖关系 GitHub。aws-mwaa-local-runner

我在访问 Web 服务器时看到 5xx 错误

我们建议您完成以下步骤:

  1. 检查 Apache Airflow 配置选项。验证您指定为 Apache Airflow 配置选项的键值对(例如 Amazon Secrets Manager)是否配置正确。要了解更多信息,请参阅我无法连接 Secrets Manager

  2. 查看 requirements.txt。验证在 requirements.txt 中列出的 Airflow “Extras”程序包和其他库是否与 Apache Airflow 版本兼容。

  3. 探索在requirements.txt文件中指定 Python 依赖关系的方法,请参阅在 requirements.txt 中管理 Python 依赖项

我看到“计划程序似乎未运行”错误

如果计划程序似乎未在运行,或者最后一个 “心跳” 是在几个小时前收到的,则 DAGs 可能不会出现在 Apache Airflow 中,也不会安排新任务。

我们建议您完成以下步骤:

  1. 确认 VPC 安全组允许入站访问端口 5432。需要使用此端口才能连接到环境的 Amazon Aurora PostgreSQL 元数据数据库。添加此规则后,给 Amazon MWAA 几分钟,错误就会消失。要了解更多信息,请参阅Amazon MWAA 上的 VPC 安全

    注意
  2. 如果计划程序未运行,则可能是由于多种因素造成的,例如依赖项安装失败计划程序过载。在 “ CloudWatch 日志” 中查看相应的日志组,确认您的 DAGs插件和要求是否正常运行。要了解更多信息,请参阅Amazon MWAA 的监控和指标

任务

以下主题描述了在环境中执行 Apache Airflow 任务时可能收到的错误。

我看到我的任务卡顿或者没有完成

如果 Apache Airflow 任务 “卡顿” 或未完成,我们建议您执行以下步骤:

  1. 可能有大量 DAGs 已定义的。减少环境的数量 DAGs 并执行环境更新(例如更改日志级别)以强制重置。

    1. Airflow 会解析它们 DAGs 是否已启用。如果您使用的容量超过环境容量的 50%,则可能会开始让 Apache Airflow 计划程序不堪重负。这会导致 CloudWatch 指标中的总解析时间过长,或者 CloudWatch 日志中的 DAG 处理时间过长。还有其他优化 Apache Airflow 配置的方法,这些方法不在本指南的讨论范围之内。

    2. 要详细了解调整环境性能我们建议的最佳实践,请参阅 Amazon MWAA 上的 Apache Airflow 的性能调整

  2. 队列中可能有大量任务。这通常表现为处于 “无” 状态的大量且不断增长的任务,或者在排队的任务待处理中显示为大量任务。 and/or CloudWatch出现此错误的原因如下:

    1. 如果要运行的任务多于环境的运行能力, and/or 则在自动缩放之前排队的大量任务有时间检测任务并部署其他工作人员。

    2. 如果要运行的任务多于环境的运行容量,我们建议减少同时运行的任务数量, and/or 增加 Apache Airflow Workers 的最低限度。 DAGs

    3. 如果在自动缩放有时间检测和部署更多工作人员之前有大量任务排队,我们建议开任务部署,以 and/or 增加 Apache Airflow Workers 的最低限度。

    4. 您可以使用 Amazon Command Line Interface (Amazon CLI) 中的 update-environment 命令来更改在您的环境中运行的工作器的最小或最大数量。

      aws mwaa update-environment --name MyEnvironmentName --min-workers 2 --max-workers 10
    5. 要详细了解调整环境性能我们建议的最佳实践,请参阅 Amazon MWAA 上的 Apache Airflow 的性能调整

  3. 如果任务停留在“正在运行”状态,也可以清除任务或将其标记为成功或失败。这允许环境的自动扩缩组件缩减运行在环境上的工作线程的数量。下图显示了滞留任务的示例。

    这是滞留任务的图像。
    1. 选择滞留任务的圆圈,然后选择清除(如图所示)。这允许 Amazon MWAA 缩减员工规模;否则,如果仍有排队的任务,Amazon MWAA 无法确定 DAGs 哪些已启用或禁用,也无法缩小规模。

      Apache Airflow 操作
  4. 要详细了解 Apache Airflow 任务生命周期,请参阅《Apache Airflow 参考指南》概念

CLI

以下主题介绍了您在 Amazon Command Line Interface中运行 Airflow CLI 命令时可能收到的错误。

在 CLI 中触发 DAG 时我看到“503”错误

Airflow CLI 在 Apache Airflow Web 服务器上运行,该服务器的并发性有限。通常,它最多可以同时运行 4 个 CLI 命令。