Java EMR-4.2.0运行自定义jar(命令运行程序)时出错
我正在AWS-EMR-4.2.0版本中运行sqoop安装脚本,如下所示。 创建集群之后(在步骤中),我已经将我的sqoop脚本作为参数提交,并将s3://elasticmapreduce/libs/script runner/script-runner.jar/command-runner.jar作为jar文件提交,但得到的错误如下所示。你能帮我吗?原因和问题是什么? 错误: 线程“main”java.lang.RuntimeException:java.io.IOException:无法运行程序“s3://bmsgcm/spark/install sqoop.sh”(在目录“.”中):错误=2,没有这样的文件或目录 位于com.amazonaws.emr.command.runner.ProcessRunner.exec(ProcessRunner.java:139) 位于com.amazonaws.emr.command.runner.CommandRunner.main(CommandRunner.java:13) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:606) 位于org.apache.hadoop.util.RunJar.run(RunJar.java:221) 位于org.apache.hadoop.util.RunJar.main(RunJar.java:136) 原因:java.io.IOException:无法运行程序“s3://bmsgcm/spark/install sqoop.sh”(在目录“.”中):错误=2,没有这样的文件或目录 位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1047) 位于com.amazonaws.emr.command.runner.ProcessRunner.exec(ProcessRunner.java:92) ... 还有7个 原因:java.io.IOException:error=2,没有这样的文件或目录 位于java.lang.UNIXProcess.forkAndExec(本机方法) 位于java.lang.UNIXProcess(UNIXProcess.java:187) 在java.lang.ProcessImpl.start(ProcessImpl.java:130) 位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1028) ... 8个以上Java EMR-4.2.0运行自定义jar(命令运行程序)时出错,java,amazon-web-services,amazon-emr,Java,Amazon Web Services,Amazon Emr,我正在AWS-EMR-4.2.0版本中运行sqoop安装脚本,如下所示。 创建集群之后(在步骤中),我已经将我的sqoop脚本作为参数提交,并将s3://elasticmapreduce/libs/script runner/script-runner.jar/command-runner.jar作为jar文件提交,但得到的错误如下所示。你能帮我吗?原因和问题是什么? 错误: 线程“main”java.lang.RuntimeException:java.io.IOException:无法运行
command-runner.jar只能读取本地文件。您可以添加引导脚本以将文件从S3复制到本地文件系统。Piggybox是正确的。与2.x和3.x EMR AMI上使用的
script runner.jar
不同,command runner.jar
只能运行本地命令。引导脚本是实现这一点的最佳方法
例如,如果您在S3上有几个spark驱动程序,并且您有一个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...
]
正如您所经历的那样,如果您只是将命令runner.jar
交换为脚本runner.jar
,它将在EMR4.x上失败
相反,请执行引导操作来调用脚本,如:
BootstrapActions=[
{
'Name': 'Install My Spark Drivers',
'ScriptBootstrapAction': {
'Path': 's3://my-bucket/spark-driver-install.sh',
'Args': []
}
}
]
上述示例表示为。不过,我并不清楚如何在web控制台中完成同样的任务 要执行脚本,可以使用脚本运行程序。我也面临同样的问题。我的脚本中有^M个字符导致了此问题。删除这些文件是有效的