Runtime.getRuntime().exec() 执行sparksubmit 返回状态返回127是什么原因?怎么解决?
String command = "sh "+"/usr/hdp/3.1.5.0-152/spark2/bin/spark-submit "+"--driver-class-path /usr/share/java/mysql-connector-java.jar "+"--jars /usr/share/java/mysql-connector-java.jar "+"--master yarn "+"--driver-cores 5 "+"--driver-memory 512m "+"--executor-memory 512m "+"--executor-cores 4 "+"--class com.hrong.job.etl.JobTest /data/SparkJars/spark-job.jar ";
命令行打印出来在服务器上执行没问题,在Spring boot 中执行 status = proc.exitValue(); status返回127,这是什么原因?
代码如下所示:
public static int EtlJobTest() throws IOException, InterruptedException {
//SparkAppHandle handler = new SparkLauncher(env).setAppName(appName)
Process proc = null;
BufferedReader br = null;
OutputStream os = null;
int status = 0;
String[] argss = new String[]{
"spark-submit \\",
"--driver-class-path /usr/share/java/mysql-connector-java.jar \\",
"--jars /usr/share/java/mysql-connector-java.jar \\",
"--master yarn \\",
"--driver-cores 5 \\",
"--driver-memory 512m \\",
"--executor-memory 512m \\",
"--executor-cores 4 \\",
"--class com.hrong.job.etl.JobTest /data/SparkJars/spark-job.jar "
};
String[] argsss = new String[] {
"sh",
"/usr/hdp/3.1.5.0-152/spark2/bin/spark-submit ", ///src/main/datax/bin
"--driver-class-path /usr/share/java/mysql-connector-java.jar "
};
String command = "sh "+"/usr/hdp/3.1.5.0-152/spark2/bin/spark-submit "+"--driver-class-path /usr/share/java/mysql-connector-java.jar "+"--jars /usr/share/java/mysql-connector-java.jar "+"--master yarn "+"--driver-cores 5 "+"--driver-memory 512m "+"--executor-memory 512m "+"--executor-cores 4 "+"--class com.hrong.job.etl.JobTest /data/SparkJars/spark-job.jar ";
proc = Runtime.getRuntime().exec(argsss);
Thread.sleep(1000);
status = proc.exitValue();
br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
os = new FileOutputStream("/data/ruoyi/logs/temp.log");
String result;
while ((result = br.readLine()) != null) {
byte[] data = (result+"\n").getBytes();
os.write(data);
System.out.println(result);
}
br.close();
os.close();
Thread.sleep(1000);
status = proc.exitValue();
return status;
}
执行结果如下:
++++++++++++++++++++++++
sh /usr/hdp/3.1.5.0-152/spark2/bin/spark-submit --driver-class-path /usr/share/java/mysql-connector-java.jar --jars /usr/share/java/mysql-connector-java.jar --master yarn --driver-cores 5 --driver-memory 512m --executor-memory 512m --executor-cores 4 --class com.hrong.job.etl.JobTest /data/SparkJars/spark-job.jar
127
Runtime.getRuntime().exec() 是否可以执行sparksumbit?