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.jarscript-runner.jar

command-runner.jar 仅适用于本地文件。

【讨论】:

谢谢 Mauricio De Diana,我已经按照 aws 文档在集群中运行脚本 link,但它对我没有用。所以我创建了自己的脚本运行器 jar 并将其放在 S3 上并执行了我的工作。再次感谢您

以上是关于AWS EMR 4.0 - 如何添加自定义 JAR 步骤来运行 shell 命令的主要内容,如果未能解决你的问题,请参考以下文章

AWS EMR 集群在自定义引导时终止

如何在 EMR 上设置减速器的数量

将 Delta Lake 包添加到 AWS EMR Notebook

如何参数化 AWS EMR 中的步骤名称?

结合 AWS EMR 输出

错误解析参数,amazon aws emr