我知道SparkLauncher用于以编程方式而不是使用spark-submit脚本来启动Spark应用程序,但是何时使用SparkLauncher或有什么好处,我感到有些困惑。
以下代码使用SparkLauncher启动主类为的Spark应用程序"org.apache.spark.launcher.WordCountApp:
代码是:
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()
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但还有另一种选择:
使用maven shade插件创建一个可运行的胖罐,将所有与spark相关的依赖项打包到一个jar中,这样,我仍然可以使用来运行spark应用程序java -jar thefatjar。
SparkLaunchervs胖子罐子有什么好处?
apache-spark ×1