AWS EMR 4.0 - 如何添加自定义 JAR 步骤来运行 shell 命令
Posted
技术标签:
【中文标题】AWS EMR 4.0 - 如何添加自定义 JAR 步骤来运行 shell 命令【英文标题】:AWS EMR 4.0 - How can I add a custom JAR step to run shell commands 【发布时间】:2015-12-08 08:50:52 【问题描述】:我正在尝试使用 EMR 4.0.0 上的步骤运行 shell 命令,并使用此链接作为参考 - http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-hadoop-script.html
但我想知道从哪里将“command-runner.jar”放在“JAR 位置”字段中 http://i.stack.imgur.com/CRicz.png
我在 AWS s3 中保留了“command-runner.jar”并尝试从该位置加载它,并在“参数”中给出了我的“example.sh”文件的 s3 位置,添加步骤后它未能给出此异常
Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Cannot run program "s3://<path>/example.sh" (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)
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.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.io.IOException: Cannot run program "s3://<path>/example.sh" (in directory "."): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
at com.amazonaws.emr.command.runner.ProcessRunner.exec(ProcessRunner.java:92)
... 7 more
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:187)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
... 8 more
【问题讨论】:
所以你从 Jar Location 指向?您是否尝试过您在问题中引用的文档中的 CLI? 不,我没有。使用 AWS 控制台。有关系吗? 不应该没关系,但是如果控制台不工作,很高兴看到 CLI 是否工作,如果它的一般错误或使用控制台的错误 @Frédéric 它也不适用于 CLI!!!!你确定我应该从 s3 中找到 command-runner.jar 吗? 【参考方案1】:要运行存储在 S3 中的 shell 脚本,请使用位于 s3://elasticmapreduce/libs/script-runner/script-runner.jar
的 script-runner.jar
。
command-runner.jar
仅适用于本地文件。
【讨论】:
谢谢 Mauricio De Diana,我已经按照 aws 文档在集群中运行脚本 link,但它对我没有用。所以我创建了自己的脚本运行器 jar 并将其放在 S3 上并执行了我的工作。再次感谢您以上是关于AWS EMR 4.0 - 如何添加自定义 JAR 步骤来运行 shell 命令的主要内容,如果未能解决你的问题,请参考以下文章