【问题标题】:AWS Datapipeline, EmrActivity step to run a hive script fails immediately with 'No such file or directory'AWS Datapipeline,运行配置单元脚本的 EmrActivity 步骤立即失败,并显示“没有这样的文件或目录”
【发布时间】:2015-11-14 01:25:20
【问题描述】:

我有一个简单的 DataPipeline 作业,它只有一个 EmrActivity,一步尝试从我的 s3 存储桶执行配置单元脚本。

EmrActivity 的配置如下所示:

{
  "name" : "Extract and Transform",
  "id" : "HiveActivity",
  "type" : "EmrActivity",
  "runsOn" : { "ref" : "EmrCluster" },
  "step" : ["command-runner.jar,/usr/share/aws/emr/scripts/hive-script --run-hive-script --args -f s3://[bucket-name-removed]/s1-tracer-hql.q -d INPUT=s3://[bucket-name-removed] -d OUTPUT=s3://[bucket-name-removed]"],
  "runsOn" : { "ref": "EmrCluster" }
}

以及运行它的相应 EmrCluster 资源的配置:

{
  "id" : "EmrCluster",
  "type" : "EmrCluster",
  "name" : "Hive Cluster",
  "keyPair" : "[removed]",
  "masterInstanceType" : "m3.xlarge",
  "coreInstanceType" : "m3.xlarge",
  "coreInstanceCount" : "2",
  "coreInstanceBidPrice": "0.10",
  "releaseLabel": "emr-4.1.0",
  "applications": ["hive"],
  "enableDebugging" : "true",
  "terminateAfter": "45 Minutes"
}

我收到的错误信息总是如下:

java.io.IOException: Cannot run program "/usr/share/aws/emr/scripts/hive-script --run-hive-script --args -f s3://[bucket-name-removed]/s1-tracer-hql.q -d INPUT=s3://[bucket-name-removed] -d OUTPUT=s3://[bucket-name-removed]" (in directory "."): error=2, No such file or directory
    at com.amazonaws.emr.command.runner.ProcessRunner.exec(ProcessRunner.java:139)
    at com.amazonaws.emr.command.runner.CommandRunner.main(CommandRunner.java:13)
...

主要错误消息是“...(在目录“.”中):错误=2,没有这样的文件或目录”。

我已经登录到主节点并验证了/usr/share/aws/emr/scripts/hive-script 的存在。我还尝试为 hive-script 指定一个基于 s3 的位置,以及其他一些地方;总是相同的错误结果。

我可以直接在 EMR 中手动创建一个集群,该集群看起来与我在此 DataPipeline 中指定的完全一样,其中一个步骤使用相同的 "command-runner.jar,/usr/share/aws/emr/scripts/hive-script ..." 命令字符串,并且它可以正常工作。

有没有人遇到过这种情况,并且可以就我缺少什么和/或做错了什么向我提供建议?我在这家已经有一段时间了。

【问题讨论】:

    标签: hadoop amazon-web-services hive amazon-emr amazon-data-pipeline


    【解决方案1】:

    经过长时间的研究和尝试错误,我能够回答我自己的问题。

    我的 Step 脚本有 3 件事,也许是 4 件事有问题:

    • 需要“script-runner.jar”,而不是“command-runner.jar”,因为我们正在运行一个脚本(我最终只是从 s3 上的 EMR 的 libs 目录中提取)
    • 需要从其他地方获取 'hive-script' - 因此,还为此访问了 s3 中的公共 EMR 库目录
    • 很有趣,谢谢 AWS;对于 Steps args('hive-script' 规范之后的所有内容)...need to comma-separate every value in it when in DataPipeline(与直接在 EMR 中的 Step 中指定 args 时的空格分隔相反)

    然后是“也许是第四个”:

    • 包括 s3 中的基本文件夹和我们正在为 hive-script 使用的特定 hive 版本(我添加这个是因为在an AWS blog 中看到类似的东西,但尚未测试它是否在我的情况,其他一切都筋疲力尽)

    所以,最后,我的工作 EmrActivity 看起来像这样:

    {
      "name" : "Extract and Transform",
      "id" : "HiveActivity",
      "type" : "EmrActivity",
      "runsOn" : { "ref" : "EmrCluster" },
      "step" : ["s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar,s3://us-east-1.elasticmapreduce/libs/hive/hive-script,--base-path,s3://us-east-1.elasticmapreduce/libs/hive/,--hive-versions,latest,--run-hive-script,--args,-f,s3://[bucket-name-removed]/s1-tracer-hql.q,-d,INPUT=s3://[bucket-name-removed],-d,OUTPUT=s3://[bucket-name-removed],-d,LIBS=s3://[bucket-name-removed]"],
      "runsOn" : { "ref": "EmrCluster" }
    }
    

    希望这有助于将其他人从我投资的同一时间槽中拯救出来。编码愉快!

    【讨论】:

      猜你喜欢
      • 2018-01-26
      • 2016-10-17
      • 1970-01-01
      • 2017-12-04
      • 2021-01-31
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多