Jan*_*yne 9 java apache-spark spark-launcher
我SparkLauncher在Spark v1.6.0中使用.我的问题是,当我使用这个类启动我的Spark作业时,它立即返回并且没有提交作业.我的代码如下.
new SparkLauncher()
.setAppName("test word count")
.setAppResource("file://c:/temp/my.jar")
.setMainClass("my.spark.app.Main")
.setMaster("spark://master:7077")
.startApplication(new SparkAppHandler.Listener() {
@Override public void stateChanged(SparkAppHandle h) { }
@Override public void infoChanged(SparkAppHandle h) { }
});
Run Code Online (Sandbox Code Playgroud)
当我调试代码时,我注意到,令我惊讶的是,所有这些clazz真正做的是调用脚本spark-submit.cmd使用ProcessBuilder.
[C:/tmp/spark-1.6.0-bin-hadoop2.6/bin/spark-submit.cmd, --master, spark://master:7077, --name, "test word count", --class, my.spark.appMain, C:/temp/my.jar]
但是,如果我ProcessBuilder直接在控制台上运行此命令(运行的命令),则会提交Spark作业.关于发生了什么的任何想法?
还有另一种方法SparkLauncher.launch()可用,但javadocs说要避免这种方法.
知道发生了什么事吗?
小智 5
如果它在控制台中工作但不能从您的程序中工作,您可能需要告诉SparkLauncher您的Spark主目录所在的位置:
.setSparkHome("C:/tmp/spark-1.6.0-bin-hadoop2.6")
Run Code Online (Sandbox Code Playgroud)
但可能还有其他问题.您可能希望使用以下方法捕获其他调试信息:
.addSparkArg("--verbose")
Run Code Online (Sandbox Code Playgroud)
和
Map<String, String> env = Maps.newHashMap();
env.put("SPARK_PRINT_LAUNCH_COMMAND", "1");
Run Code Online (Sandbox Code Playgroud)
将env对象传递给SparkLauncher构造函数:
new SparkLauncher(env)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2453 次 |
| 最近记录: |