apache-spark - SparkLauncher和Java -jar fat-jar相比有什么好处?

标签 apache-spark

我知道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应用程序。

与可运行的胖jar相比,SparkLauncher有什么好处?

最佳答案

what's benefit of SparkLauncher, Is there some benefit of SparkLauncher over fat runnable jar?



考虑一下启动Spark应用程序的不同方式以及您拥有的集成选项。

使用 fat jar ,您必须安装Java,并且启动Spark应用程序需要执行java -jar [your-fat-jar-here]。如果要从Web应用程序启动该应用程序,则很难使其自动化。

使用SparkLauncher,您可以选择从另一个应用程序启动Spark应用程序,例如上面的Web应用程序。这要容易得多。

虽然两者都以某种方式为您提供了集成点,但是SparkLauncher更加易于在另一个基于JVM的应用程序中使用。您不必还原为使用命令行(具有自己的“漂亮内容”)。

If I want to run spark application within another program, I will simply create SparkContext within the web application, spark is used as normal framework in the web.



这将使Web应用程序和Spark应用程序紧密耦合在一起,并在Spark应用程序执行时保持计算资源(如线程)繁忙。 HTTP请求是短期的,而Spark作业是长期的。

关于apache-spark - SparkLauncher和Java -jar fat-jar相比有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49082286/

相关文章:

scala - Spark Scala scala.util.control.Exception 在 map 中捕获并删除 None

scala - 在 Spark 中分解结构列时出错

java - Spark : Understanding coalesce method?

elasticsearch - 如何针对 ElasticSearch 执行 SQL 查询(使用 org.elasticsearch.spark.sql 格式)?

java - javardd中如何通过header进行过滤?

dataframe - Pyspark Dataframe 差异 - param != null 不返回的地方?

apache-spark - 将2TB的压缩多行JSON转换为ND JSON

java - Spark udf - 带有 json 的 classcastException

scala - 如何将 Dataframe 列名称与 Scala 案例类属性相匹配?

java - 是否可以使用 Spark Streaming 流式传输数据库表数据