aws datapipeline,empractivity运行配置单元脚本的步骤立即失败,并显示“没有这样的文件或目录”

vyswwuz2  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(307)

我有一个简单的datapipeline作业,它只有一个简单的实用性,只需一个步骤就可以从我的s3 bucket执行一个hive脚本。
empractivity的配置如下所示:

{
  "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 ,在其他一些地方;总是相同的错误结果。
我可以直接在emr中手动创建一个集群,它看起来与我在这个datapipeline中指定的完全一样,使用相同的步骤 "command-runner.jar,/usr/share/aws/emr/scripts/hive-script ..." 命令字符串,它可以正常工作。
有没有人经历过这种情况,能告诉我我遗漏了什么和/或做错了什么?我在这已经有一段时间了。

t98cgbkg

t98cgbkg1#

经过长时间的研究和尝试,我能够回答我自己的问题。
我的步骤脚本有3处错误,可能有4处错误:
需要“scriptrunner.jar”,而不是“command runner.jar”,因为我们正在运行一个脚本(最后我只是从s3上的emr的libs dir中提取了这个脚本)
需要从其他地方获取“hive脚本”——因此,我们也为此访问了s3中的公共emr libs dir
一个有趣的,耶,谢谢你;对于steps args(在'hive script'规范之后的所有内容)…在datapipeline中需要用逗号分隔其中的每个值(而不是在emr中直接在step中指定args时用空格分隔)
然后是“也许第四个”:
包括s3中的基本文件夹和我们正在为配置单元脚本处理的特定配置单元版本(我添加这个是因为在aws博客中看到了类似的内容,但还没有测试它是否对我的情况有影响,其他内容太过枯燥)
所以,最后,我的工作效率是这样结束的:

{
  "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" }
}

希望这有助于拯救其他人从同一时间沉没我投资。快乐的编码!

相关问题