解决常见问题 - AWS Data Pipeline

解决常见问题

本主题介绍了 AWS Data Pipeline 问题的各种症状,并推荐了步骤来解决这些问题。

管道停滞在 Pending 状态

管道停滞在 PENDING 状态,指示该管道尚未激活,或者由于管道定义中的错误而激活失败。请确保您在使用 AWS Data Pipeline CLI 提交管道时,或在使用 AWS Data Pipeline 控制台尝试保存或激活管道时未收到任何错误。此外,请确保您的管道具有有效定义。

使用 CLI 在屏幕上查看管道定义:

aws datapipeline --get-pipeline-definition --pipeline-id df-EXAMPLE_PIPELINE_ID

确保管道定义完整,检查右大括号,验证所需逗号,检查缺少的引用以及其他语法错误。最好使用可直观地验证 JSON 文件语法的文本编辑器。

管道组件停滞在 Waiting for Runner 状态

如果您的管道处于 SCHEDULED 状态并且一个或多个任务显示为停滞在 WAITING_FOR_RUNNER 状态,请确保您为这些任务的 runsOn 或 workerGroup 字段设置了有效值。如果两个值均为空或缺失,则任务将无法启动,因为任务与执行任务的工作线程之间没有关联。在这种情况下,您已定义了工作,但未定义哪个计算机执行该工作。如果适用,请验证分配到管道组件的 workerGroup 值与您为任务运行程序配置的 workerGroup 值具有完全相同的名称和大小写。

注意

如果您提供 runsOn 值并且存在 workerGroup,则将忽略 workerGroup。

此问题的另一个可能的原因是,向任务运行程序提供的终端节点和访问密钥,与 AWS Data Pipeline 控制台或安装 AWS Data Pipeline CLI 工具的计算机上的不同。您可能已经创建了没有可见错误的新管道,但任务运行程序由于凭证中的不同而轮询了错误位置,或者轮询了正确的位置但权限不足,无法确定和执行由管道定义指定的工作。

管道组件停滞在 WAITING_ON_DEPENDENCIES 状态

如果您的管道处于 SCHEDULED 状态并且一个或多个任务停滞在 WAITING_ON_DEPENDENCIES 状态,请确保已满足管道的初始先决条件。如果不满足逻辑链中的第一个对象的先决条件,依赖于第一个对象的所有对象无法退出 WAITING_ON_DEPENDENCIES 状态。

例如,请考虑以下管道定义中的摘录。在这种情况下,InputData 对象具有先决条件“Ready”,它指定在 InputData 对象完成之前,数据必须存在。如果数据不存在,InputData 对象将保持 WAITING_ON_DEPENDENCIES 状态以等待路径字段指定的数据变为可用。依赖于 InputData 的任何对象同样保持 WAITING_ON_DEPENDENCIES 状态,以等待 InputData 对象进入 FINISHED 状态。

{ "id": "InputData", "type": "S3DataNode", "filePath": "s3://elasticmapreduce/samples/wordcount/wordSplitter.py", "schedule":{"ref":"MySchedule"}, "precondition": "Ready" }, { "id": "Ready", "type": "Exists" ...

此外,请确保您的对象拥有适当的权限,可以访问数据。在前面的示例中,如果凭证字段中的信息无权访问路径字段中指定的数据,InputData 对象将停滞在 WAITING_ON_DEPENDENCIES 状态,因为它无法访问路径字段指定的数据,即使该数据存在。

还有可能是与 Amazon S3 通信的资源没有与其关联的公有 IP 地址。例如,公有子网中的 Ec2Resource 必须具有关联的公有 IP 地址。

最后,在某些情况下,资源实例可能比计划启动关联的活动早得多地进入 WAITING_ON_DEPENDENCIES 状态,这可能会造成资源或活动失败的印象。

运行未按计划启动

检查您选择了正确的计划类型,确定您的任务在计划间隔的开头 (Cron 风格计划类型) 还是在计划间隔的结尾 (时间序列计划类型) 启动。

此外,检查您已在计划对象中正确指定了日期,并且 startDateTime 和 endDateTime 值使用 UTC 格式,例如在以下示例中:

{ "id": "MySchedule", "startDateTime": "2012-11-12T19:30:00", "endDateTime":"2012-11-12T20:30:00", "period": "1 Hour", "type": "Schedule" },

管道组件以错误顺序运行

您可能注意到,管道组件的开始和结束时间以错误的顺序运行,或者以与您预期不同的顺序运行。需要了解的是,如果在启动时满足了管道组件的先决条件,这些组件将同时开始运行。换句话说,不会默认按顺序执行管道组件;如果需要按特定的顺序执行,您必须使用先决条件和 dependsOn 字段控制执行顺序。

确认您使用的 dependsOn 字段填充了对相应先决条件管道组件的引用,并在组件之间具有所需的所有指针以实现所需的顺序。

EMR 集群失败,出现错误:请求中包含的安全令牌无效

验证您的 IAM 角色、策略和信任关系,如 适用于 AWS Data Pipeline 的 IAM 角色 中所述。

权限不足,无法访问资源

您在 IAM 角色上设置的权限确定 AWS Data Pipeline 是否可以访问您的 EMR 集群和 EC2 实例来运行管道。此外,IAM 还提供了信任关系概念,从而允许代表您创建资源。例如,当您创建一个使用 EC2 实例运行命令来移动数据的管道时,AWS Data Pipeline 可以为您预置此 EC2 实例。如果您遇到问题,尤其是涉及到您手动可以访问但 AWS Data Pipeline 无法访问的资源,请验证您的 IAM 角色、策略和信任关系,如 适用于 AWS Data Pipeline 的 IAM 角色 中所述。

状态代码:400 错误代码:PipelineNotFoundException

此错误表示您的 IAM 默认角色可能没有 AWS Data Pipeline 正常工作所需的权限。有关更多信息,请参阅适用于 AWS Data Pipeline 的 IAM 角色

创建管道导致安全令牌错误

在您尝试创建管道时收到了以下错误:

无法使用“pipeline_name”创建管道。错误:UnrecognizedClientException - 请求中包含的安全令牌无效。

在控制台中看不到管道详细信息

AWS Data Pipeline 控制台管道筛选条件应用到管道的计划 开始日期,而不考虑何时提交的管道。可以使用发生在过去的计划开始日期提交新管道,默认日期筛选条件可能不显示。要查看管道详细信息,请更改日期筛选条件,确保计划管道开始日期在日期范围筛选条件之内。

远程运行程序中的错误状态代码:404,Amazon Web Service:Amazon S3

此错误表示任务运行程序无法访问存储在 Amazon S3 中的您的文件。验证:

  • 您已正确设置凭证

  • 您尝试访问的 Amazon S3 存储桶存在

  • 您有权访问 Amazon S3 存储桶

访问被拒绝 - 未授权执行函数 datapipeline:

在任务运行程序日志中,您可能会看到类似以下内容的错误消息:

  • ERROR 状态代码:403

  • Amazon Web Service:DataPipeline

  • AWS 错误代码:AccessDenied

  • AWS 错误消息:用户:arn:aws:sts::XXXXXXXXXXXX:federated-user/i-XXXXXXXX 未得到授权执行:datapipeline:PollForTask。

注意

在该错误消息中,可能会将 PollForTask 替换为其他 AWS Data Pipeline 权限的名称。

此错误消息表示您指定的 IAM 角色需要额外的权限才能与 AWS Data Pipeline 交互。确保您的 IAM 角色策略包含以下行,其中 PollForTask 替换为您要添加的权限的名称(使用 * 以授予所有权限)。有关如何创建新 IAM 角色和将策略应用到其上的更多信息,请参阅使用 IAM 指南中的管理 IAM 策略

{ "Action": [ "datapipeline:PollForTask" ], "Effect": "Allow", "Resource": ["*"] }

旧 Amazon EMR AMI 可能会为大 CSV 文件创建 False 数据

在 Amazon EMR AMI 3.9(3.8 及更低版本)上,AWS Data Pipeline 使用自定义 InputFormat 读取和写入 CSV 文件用于 MapReduce 作业。这在服务对 Amazon S3 暂存表时使用。此 InputFormat 上发现问题,从大 CSV 文件上读取记录会导致生成未正确复制的表。此问题已在更高版本的 Amazon EMR 中修复。请使用 Amazon EMR AMI 3.9 或 Amazon EMR 版本 4.0.0 或更高版本。

提高 AWS Data Pipeline 限制

有时,您可能会超过特定 AWS Data Pipeline 系统限制。例如,默认管道限制为 20,每个管道中有 50 个对象。如果您发现自己需要的管道数超过限制,请考虑合并多个管道来创建较少数量的管道,每个管道中有更多对象。有关 AWS Data Pipeline 限制的更多信息,请参阅 AWS Data Pipeline 限制。但是,如果您无法使用管道合并技术来解决限制问题,请使用此表单申请增加容量:提高 Data Pipeline 上限