【问题标题】:AWS Data Pipeline ErrorAWS 数据管道错误
【发布时间】:2019-08-14 06:40:19
【问题描述】:

使用数据管道 aws 进程备份 dynamoDB 表时出现错误:

02 May 2017 07:19:04,544 [WARN] (TaskRunnerService-df-0940986HJGYQM1ZJ8BN_@EmrClusterForBackup_2017-04-25T13:31:55-2) df-0940986HJGYQM1ZJ8BN amazonaws.datapipeline.cluster.EmrUtil: EMR job flow named 'df-0940986HJGYQM1ZJ8BN_@EmrClusterForBackup_2017-04-25T13:31:55' with jobFlowId 'j-2SJ0OQOM0BTI' is in status 'RUNNING' because of the step 'df-0940986HJGYQM1ZJ8BN_@TableBackupActivity_2017-04-25T13:31:55_Attempt=2' failures 'null'
02 May 2017 07:19:04,544 [INFO] (TaskRunnerService-df-0940986HJGYQM1ZJ8BN_@EmrClusterForBackup_2017-04-25T13:31:55-2) df-0940986HJGYQM1ZJ8BN amazonaws.datapipeline.cluster.EmrUtil: EMR job '@TableBackupActivity_2017-04-25T13:31:55_Attempt=2' with jobFlowId 'j-2SJ0OQOM0BTI' is in  status 'RUNNING' and reason 'Running step'. Step 'df-0940986HJGYQM1ZJ8BN_@TableBackupActivity_2017-04-25T13:31:55_Attempt=2' is in status 'FAILED' with reason 'null'
02 May 2017 07:19:04,544 [INFO] (TaskRunnerService-df-0940986HJGYQM1ZJ8BN_@EmrClusterForBackup_2017-04-25T13:31:55-2) df-0940986HJGYQM1ZJ8BN amazonaws.datapipeline.cluster.EmrUtil: Collecting steps stderr logs for cluster with AMI 3.9.0
02 May 2017 07:19:04,558 [INFO] (TaskRunnerService-df-0940986HJGYQM1ZJ8BN_@EmrClusterForBackup_2017-04-25T13:31:55-2) df-0940986HJGYQM1ZJ8BN amazonaws.datapipeline.taskrunner.LogMessageUtil: Returning tail errorMsg :    at org.apache.hadoop.mapred.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:132)
 at org.apache.hadoop.mapreduce.JobSubmitter.checkSpecs(JobSubmitter.java:460)
 at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:343)
 at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1285)
 at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1282)
 at java.security.AccessController.doPrivileged(Native Method)
 at javax.security.auth.Subject.doAs(Subject.java:415)
 at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)
 at org.apache.hadoop.mapreduce.Job.submit(Job.java:1282)
 at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:562)
 at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:557)
 at java.security.AccessController.doPrivileged(Native Method)
 at javax.security.auth.Subject.doAs(Subject.java:415)
 at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)
 at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:557)
 at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:548)
 at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:833)
 at org.apache.hadoop.dynamodb.tools.DynamoDbExport.run(DynamoDbExport.java:79)
 at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
 at org.apache.hadoop.dynamodb.tools.DynamoDbExport.main(DynamoDbExport.java:30)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:606)
 at org.apache.hadoop.util.RunJar.main(RunJar.java:212)

有大量数据(600 万)。管道工作了 4 天并出现错误。无法找出错误。

【问题讨论】:

  • 你能提供你的管道定义吗?
  • 另外,请尝试在 AWS 论坛上提问,可以访问您的管道的人可以提供更多信息。
  • 你找到解决这个问题的方法了吗?
  • @Nir 请看下面我的回答...

标签: amazon-web-services amazon-data-pipeline


【解决方案1】:

通过分析您的日志,尤其是这一行...

org.apache.hadoop.dynamodb.tools.DynamoDbExport

您似乎正在运行在名为 "Export DynamoDB table to S3" 的预定义模板之一上创建的 AWS Data Pipeline。

此数据管道采用多个输入参数,您可以在管道架构师中进行编辑,但最重要的参数是:

  1. myDDBTableName - 正在导出的 DynamoDB 表的名称。
  2. myOutputS3Loc​​ - 您希望 MapReduce 作业导出数据的完整 S3 路径。这必须是格式 s3:/// 。然后,MR 作业将根据日期时间戳将您的数据导出到 S3 位置(例如 s3://<S3_BUCKET_NAME>/<S3_BUCKET_PREFIX>/2019-08-13-15-32-02
  3. myDDBReadThroughputRatio - 指定 MR 作业将消耗的 DDB 表 RCU 的比例以完成操作。建议根据您最近的指标 + MR 作业的额外 RCU 将其设置为预置吞吐量。换句话说,不要让您的 DDB 表使用“按需”配置 - 它不会起作用。此外,我建议您对 MR 作业所需的额外 RCU 慷慨一些,因为这将确保您的 EMR 集群资源能够更快地完成,并且几个小时的额外 RCU 比额外的 EMR 计算资源更便宜。
  4. myDDBRegion - 您的 DDB 表的区域(请记住:DDB 是多区域服务,与全局表的概念无关)。

现在我们已经熟悉了这个数据管道需要的这些参数,让我们看看这个日志行:

02 May 2017 07:19:04,558 [INFO] (TaskRunnerService-df-0940986HJGYQM1ZJ8BN_@EmrClusterForBackup_2017-04-25T13:31:55-2) df-0940986HJGYQM1ZJ8BN amazonaws.datapipeline.taskrunner.LogMessageUtil: Returning tail errorMsg :    at org.apache.hadoop.mapred.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:132)

虽然它没有出现在 ERROR 日志级别,但这是来自 Hadoop 框架无法识别 Hadoop 作业的输出格式位置的错误消息。 当您的 Data Pipeline 向 Hadoop 的 TaskRunner 提交任务时,它会评估输出位置格式并意识到它不是可以支持的。这可能意味着多种情况:

  1. 您的数据管道参数 myOutputS3Loc​​ 在两次运行之间更改为无效值。
  2. 您的数据管道参数 myOutputS3Loc​​ 指向同时被删除的 S3 存储桶。

我建议检查 myOutputS3Loc​​ 参数和传递的值,以确保您的 MR 工作得到正确的输入。您还可以通过在作业运行时检查 EMR 控制台中的控制器日志来验证向 EMR 任务提交了哪些参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多