我正在尝试将带有 Spark 作业的 JAR 从 Java 代码提交到 YARN 集群中。我正在使用 SparkLauncher 提交 SparkPi 示例:
Process spark = new SparkLauncher()
.setAppResource("C:\\spark-1.4.1-bin-hadoop2.6\\lib\\spark-examples-1.4.1-hadoop2.6.0.jar")
.setMainClass("org.apache.spark.examples.SparkPi")
.setMaster("yarn-cluster")
.launch();
System.out.println("Waiting for finish...");
int exitCode = spark.waitFor();
System.out.println("Finished! Exit code:" + exitCode);
有两个问题:
- 在“yarn-cluster”模式下提交时,应用程序成功提交到 YARN 并成功执行(它在 YARN UI 中可见,报告为 SUCCESS 并在输出中打印 pi)。但是,提交应用程序永远不会收到处理完成的通知 - 在打印“Waiting to finish...”后它会无限挂起。容器的日志可以在这里找到
- 在“yarn-client”模式下提交时,应用程序没有出现在 YARN UI 中,提交应用程序在“Waiting to finish...”处挂起。当挂起代码被杀死时,应用程序显示在 YARN UI 中并报告为SUCCESS,但输出为空(pi 没有打印出来)。容器的日志可以在这里找到
我尝试使用 Oracle Java 7 和 8 执行提交应用程序。