EMR-4.2.0自定义Jar文件错误

时间:2015-12-23 18:27:43

标签: amazon-web-services emr amazon-emr

我正在AWS - EMR-4.2.0版本中运行sqoop安装脚本,然后是this documentation。 创建集群后(在步骤中),我已将我的sqoop脚本作为参数提交,并将s3://elasticmapreduce/libs/script-runner/script-runner.jar/mand- runner.jar作为jar文件提交,但得到的错误就像这个。你能帮我解释一下原因和问题吗? emr jar

错误:

    Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Cannot run program "s3://bmsgcm/spark/install-sqoop.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://bmsgcm/spark/install-sqoop.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

3 个答案:

答案 0 :(得分:1)

command-runner.jar只能读取本地文件。您可以添加引导脚本以将文件从S3复制到本地文件系统。

答案 1 :(得分:1)

Piggybox是正确的。与2.x和3.x EMR AMI上使用的script-runner.jar不同,command-runner.jar只能运行本地命令。引导脚本是执行此操作的最佳方式。

例如,如果您在S3上有一些火花驱动程序,并且您有一个shell脚本(也在S3上)将它们复制到主节点以供以后在spark-submit的作业流程步骤中使用,那么你可能有这样的一步:

Steps=[
    {
        'Name': 'Install My Spark Drivers',
        'ActionOnFailure':'TERMINATE_JOB_FLOW',
        'HadoopJarStep':
            'Jar': 's3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar',
            'Args': [
                's3://my-bucket/spark-driver-install.sh',
            ]
        }
   },
   ...other steps...
]

正如您所经历的那样,如果您只是command-runner.jar替换script-runner.jar,那么EMR 4.x将失败。

相反,请执行引导操作来调用脚本,例如:

BootstrapActions=[
    {
        'Name': 'Install My Spark Drivers',
        'ScriptBootstrapAction': {
            'Path': 's3://my-bucket/spark-driver-install.sh',
            'Args': []
        }
    }
]

以上示例表示为boto3 run_job_flow kwargs。但是,对于我来说,如何在Web控制台中完成相同的操作并不是很明显。

答案 2 :(得分:0)

要执行脚本,可以使用脚本运行器。我也面临着同样的问题。我的脚本中包含^ M个字符,导致了此问题。删除那些工作。