我正在尝试通过以下方式执行它:
Process process = Runtime.getRuntime().exec(spark_cmd);
运气不好。通过 shell 运行的命令启动我的应用程序并成功。通过 exec 运行它会启动一个进程,该进程会在不久之后死亡并且什么也不做。 当我尝试
process.waitFor();
它挂起并永远等待。当我尝试从过程中读取一些东西时,真正的魔法开始了:
InputStreamReader isr = new InputStreamReader(process.getErrorStream());
BufferedReader br = new BufferedReader(isr);
为此,我启动了一个在 while 循环中从流中读取的线程:
class ReadingThread extends Thread {
BufferedReader reader;
Wontekk(BufferedReader reader) {
this.reader = reader;
}
@Override
public void run() {
String line;
try {
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
应用程序启动,做一些事情,然后挂起。当我中止我的应用程序时,spark 应用程序唤醒 (??????????) 并完成剩余的工作。有人对正在发生的事情有合理的解释吗?
谢谢
最佳答案
您可以借助 Java 代码在 SparkLauncher 的帮助下将 spark 作业作为 spark-submit 发送,这样您就可以通过下面的链接查看我们的
https://spark.apache.org/docs/1.4.0/api/java/org/apache/spark/launcher/SparkLauncher.html
关于java - 从 java 以编程方式执行 spark-submit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35866640/