【问题标题】:What are the benefits of SparkLauncher vs java -jar fat-jar?SparkLauncher 与 java -jar fat-jar 有什么好处?
【发布时间】: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


    【解决方案1】:

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

    想想您启动 Spark 应用程序的不同方式以及您有哪些集成选项。

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

    使用SparkLauncher,您可以选择从另一个应用程序启动 Spark 应用程序,例如上面的网络应用程序。就简单多了。

    虽然两者都以某种方式为您提供了集成点,但 SparkLauncher 只是在另一个基于 JVM 的应用程序中使用起来更简单。您不必重新使用命令行(它有自己的“优点”)。

    如果我想在另一个程序中运行 spark 应用程序,我将简单地在 web 应用程序中创建 SparkContext,spark 在 web 中用作普通框架。

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

    【讨论】:

    • 我看到 SparkLauncher 优于可运行的胖 jar,SparkLauncher#startApplication 返回一个可以检查/杀死/..应用程序的句柄,
    猜你喜欢
    • 2014-04-10
    • 2021-08-01
    • 2021-12-09
    • 1970-01-01
    • 2019-07-04
    • 2017-01-26
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多