【发布时间】:2018-03-09 18:13:49
【问题描述】:
我知道 SparkLauncher 用于以编程方式启动 spark 应用程序,而不是使用 spark-submit 脚本,但我对何时使用 SparkLauncher 或有什么好处感到有些困惑。
以下代码使用 SparkLauncher 启动一个主类为 "org.apache.spark.launcher.WordCountApp 的 spark 应用程序:
代码是:
object WordCountSparkLauncher {
def main(args: Array[String]) {
val proc = new SparkLauncher()
.setAppName("WordCountSparkLauncherApp")
.setMaster("local")
.setSparkHome("D:/spark-2.2.0-bin-hadoop2.7")
.setAppResource("file:///d:/spark-2.2.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.2.0.jar")
.setVerbose(true)
.setMainClass("org.apache.spark.launcher.WordCountApp")
.launch()
new Thread(new IORunnable(proc.getInputStream, "proc-input-stream")).start()
new Thread(new IORunnable(proc.getErrorStream, "proc-error-input-stream")).start()
proc.waitFor()
}
}
它工作正常,但还有另一种选择:
使用maven shade插件创建一个可运行的fat jar,将所有spark相关的依赖打包到一个jar中,这样我仍然可以用java -jar thefatjar运行spark应用程序。
SparkLauncher 与胖的可运行 jar 相比有什么好处?
【问题讨论】:
标签: apache-spark