使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何对使用 Amazon MWAA 触发 Amazon EMR 步骤时收到的错误进行故障排除?

4 分钟阅读
0

我想对使用 Amazon Managed Workflows for Apache Airflow (Amazon MWAA) 触发 Amazon EMR 步骤时收到的错误进行故障排除。

简短描述

当您使用 Amazon MWAA 触发 Amazon EMR 步骤时,您可能会收到以下错误:

"An error occurred (AccessDeniedException) when calling the DescribeCluster operation"

"An error occurred (AccessDeniedException) when calling the AddJobFlowSteps operation"

"EMR endpoint is not reachable: botocore.exceptions.ConnectTimeoutError: Connect timeout on endpoint URL"

"An error occurred (InvalidRequestException) when calling the DescribeCluster operation: Cluster id is not valid."

"An error occurred (ValidationException) when calling the AddJobFlowSteps operation: Maximum number of active steps(State = 'Running', 'Pending' or 'Cancel_Pending') for cluster exceeded."

"An error occurred (ValidationException) when calling the AddJobFlowSteps operation: jobFlowId is not valid."

"An error occurred (ValidationException) when calling the AddJobFlowSteps operation: A job flow that is shutting down, terminated, or finished may not be modified."

"No module named 'airflow.providers.amazon.aws.operators.emr_add_steps'"

解决方法

**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

Amazon EMR API 调用期间出现 accessDenieException 错误

当 Amazon MWAA 运行时角色存在与 Amazon EMR 操作相关的权限问题时,将会出现这些错误。要解决这些错误,请确保 Amazon MWAA 运行时角色拥有 DescribeClusterAddJobFlowSteps 权限。

示例:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "EMRStepPermissions",
        "Effect": "Allow",
        "Action": [
                "elasticmapreduce:DescribeCluster",
                "elasticmapreduce:AddJobFlowSteps"
                ],
        "Resource": "arn:aws:elasticmapreduce:example-region:example-account-id:cluster/example-cluster-id"
    }
    ]
}

**注意:**请将 example-region 替换为您的 AWS 区域,将 example-account-id 替换为您的账户 ID,以及将 example-cluster-id 替换为您的集群 ID。

EMR endpoint is not reachable: botocore.exceptions.ConnectTimeoutError: Connect timeout on endpoint URL

当 Amazon MWAA 环境由于网络配置错误而无法访问 Amazon EMR 集群时,将会出现此错误。要解决此错误,请确保 Amazon MWAA Amazon Virtual Private Cloud (Amazon VPC) 配置允许出站流量流向集群。

对于公共路由,请确保安全组和子网具有允许出站流量流向集群的规则和路由。对于私有路由,请确保 Amazon EMR 端点与 Amazon MWAA 环境子网和安全组相关联。

如果 Amazon EMR 位于另一个 Amazon VPC 中,则请使用 Amazon VPC 对等连接建立适当的网络连接。

An error occurred (InvalidRequestException) when calling the DescribeCluster operation: Cluster id is not valid

要解决此错误,请确认集群 ID 存在于配置了 Amazon MWAA 环境的同一区域和账户中。此外,要允许 AWS Identity and Access Management (IAM) 用户查看集群详细信息,请将 JOB_FLOW_OVERRIDES 参数中的 VisibleToAllUsers 设置为 True。有关详细信息,请参阅请求参数

要查看 Amazon MWAA 运行时角色列出集群所需的权限,请运行 describe-cluster 命令。

要查看有关 Amazon EMR 集群的更多详细信息,请参阅查看 Amazon EMR 集群状态和详细信息

An error occurred (ValidationException) when calling the AddJobFlowSteps operation: jobFlowId <'some-string'> is not valid

当在 EmrAddStepsOperator 中传递了错误的 job_flow_id 时,将会出现此错误。要解决此问题,请确保使用 Amazon EMR 集群 ID 作为 job_flow_id。有关详细信息,请参阅 Apache Airflow 文档中的参数

An error occurred (ValidationException) when calling the AddJobFlowSteps operation: A job flow that is shutting down, terminated, or finished may not be modified

当由于 Amazon EMR 作业流关闭、已终止或已完成而无法执行 AddJobFlowSteps 操作时,将会出现此错误。要解决此错误,请使用 AWS CloudTrail 在任务日志中检查集群何时终止以及 EmrAddStepsOperator 任务何时启动。如果用于终止集群的命令在启动集群的任务之前触发,则会发生此错误。

要解决此错误,请在 DAG 代码的 JOB_FLOW_OVERRIDES 参数中将 KeepJobFlowAliveWhenNoSteps 添加为 True。此设置会在步骤完成后将集群转换为正在等待状态。

示例:

JOB_FLOW_OVERRIDES = {
    "Name": "Data-Pipeline-" + execution_date,
    "ReleaseLabel": "emr-5.29.0",
    "LogUri": "s3://{}/logs/emr/".format(S3_BUCKET_NAME),
    "Instances": {
        "InstanceGroups": [
            {
                "Name": "Master nodes",
                "Market": "ON_DEMAND",
                "InstanceRole": "MASTER",
                "InstanceType": "m5.xlarge",
                "InstanceCount": 1
            },
            {
                "Name": "Slave nodes",
                "Market": "ON_DEMAND",
                "InstanceRole": "CORE",
                "InstanceType": "m5.xlarge",
                "InstanceCount": 2
            }
        ],
        "TerminationProtected": False,
        "KeepJobFlowAliveWhenNoSteps": True
    }
}

要在步骤完成后终止集群,请使用以下方法之一:

使用 EmrTerminateJobFlowOperator 创建一个任务作为 DAG 中的最后一个任务,该任务将在步骤完成后终止集群:

cluster_remover = EmrTerminateJobFlowOperator(
        task_id='remove_cluster',
        job_flow_id=cluster_creator.output,
        aws_conn_id='aws_default',
    )

或者,在 JOB_FLOW_OVERRIDES 中设置自动终止策略,以在指定空闲时间后终止集群。以下示例配置将在空闲时间 60 分钟后终止集群:

JOB_FLOW_OVERRIDES = {
    "Name": "Data-Pipeline-" + execution_date,
    "ReleaseLabel": "emr-<version>",
    "LogUri": "s3://{}/logs/emr/".format(example-s3-bucket-name),
    "Instances": {
        "InstanceGroups": [
            {
                "Name": "Master nodes",
                "Market": "ON_DEMAND",
                "InstanceRole": "MASTER",
                "InstanceType": "m5.xlarge",
                "InstanceCount": 1
            },
            {
                "Name": "Slave nodes",
                "Market": "ON_DEMAND",
                "InstanceRole": "CORE",
                "InstanceType": "m5.xlarge",
                "InstanceCount": 2
            }
        ],
        "TerminationProtected": False,
        "KeepJobFlowAliveWhenNoSteps": True
    },
    "AutoTerminationPolicy": {"IdleTimeout": 3600}
}

有关详细信息,请参阅 Apache Airflow 网站上的定义任务

要查看其他 JOB_FLOW_OVERRIDES,请参阅 run_job_flow

有关 Amazon EMR 自动终止的详细信息,请参阅使用自动终止策略进行 Amazon EMR 集群清理

"No module named 'airflow.providers.amazon.aws.operators.emr_add_steps'"

如果您需要使 Amazon MWAA 环境和 Amazon EMR 集群位于不同的区域,请创建另一个连接 ID。确保您使用的区域是用于启动集群的 AWS 区域。如果您想更改默认区域,请完成以下步骤:

  1. 打开 Apache Airflow 用户界面
  2. 在顶部导航窗格中,依次选择 Admin(管理)、Connections(连接),然后选择 + 按钮。
  3. 输入要在 DAG 中使用的连接 ID 的名称。
  4. 选择 Amazon Web Service 作为 Connection Type(连接类型)。
  5. 在文本字段中,添加以下 JSON:
    {"region_name": "example-region"}
    **注意:**请将 example-region 替换为要用作默认区域的区域。
  6. 确保为 Amazon MWAA 中使用的每个 Amazon EMR 运算符使用新的连接 ID。

DAG 导入错误

如果您收到 DAG 导入错误,则表示未安装所需的软件包、导入路径不同或运算符名称不正确。要解决这些错误,请确认您的 Amazon MWAA 环境中所安装的 apache-airflow-providers-amazon 软件包版本。为此,请查看 Airflow UI 提供商页面。或者,请参阅 Amazon MWAA 环境中安装的 Apache Airflow 提供商软件包。然后,根据提供商软件包版本检查 Airflow 提供商文档中的导入路径和运算符名称。例如,Amazon MWAA 2.2.2 具有 apache-airflow-providers-amazon 2.4.0。要查看 2.4.0 版的导入路径和运算符名称,请参阅 Apache Airflow 网站上的 airflow.providers.amazon.aws

以下是每个 Amazon EMR 运算符的导入路径:

  • EmrAddStepsOperatorairflow.providers.amazon.aws.operators.emr_add_steps
  • EmrCreateJobFlowOperatorairflow.providers.amazon.aws.operators.emr_create_job_flow
  • EmrTerminateJobFlowOperatorairflow.providers.amazon.aws.operators.emr_terminate_job_flow

**注意:**对于具有 apache-airflow-providers-amazon 8.16.0 的 Amazon MWAA 2.8.1,所有 Amazon EMR 运算符都将移至通用 Amazon EMR 类。有关详细信息,请参阅 Apache Airflow 网站上的 airflow.providers.amazon.aws.operators.emr

要包含任何 Amazon EMR 运算符的路径,请从 airflow.providers.amazon.aws.operators.emr 导入该路径:

from airflow.providers.amazon.aws.operators.emr import EmrAddStepsOperator,
EmrCreateJobFlowOperator, EmrTerminateJobFlowOperator

**注意:**确保根据您的用例修改 DAG 导入语句。

AWS 官方
AWS 官方已更新 1 个月前