gpt4 book ai didi

hadoop - AWS Datapipeline,运行配置单元脚本的 EmrActivity 步骤立即失败并显示 'No such file or directory'

转载 作者:可可西里 更新时间:2023-11-01 15:01:19 24 4
gpt4 key购买 nike

我有一个简单的 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 ..." 命令字符串,它可以正常工作。

有没有人遇到过这种情况,可以就我遗漏和/或做错了什么向我提出建议?我在这方面已经有一段时间了。

最佳答案

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

我的 Step 脚本有 3 处,也许 4 处错误:

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

然后是“可能是第 4 个”:

  • 包括 s3 中的基础文件夹和我们正在使用的配置单元脚本的特定配置单元版本(我添加这个是因为在 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" }
}

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

关于hadoop - AWS Datapipeline,运行配置单元脚本的 EmrActivity 步骤立即失败并显示 'No such file or directory',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33704161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com