【问题标题】:Difference in running a spark application with sbt run or with spark-submit script使用 sbt run 或使用 spark-submit 脚本运行 spark 应用程序的区别
【发布时间】:2019-05-22 23:29:55
【问题描述】:

我是 Spark 的新手,在学习这个框架时,我发现,据我所知,用 Scala 编写的 Spark 应用程序有两种运行方式:

  1. 将项目打包成 JAR 文件,然后使用 spark-submit 脚本运行。
  2. 直接使用 sbt run 运行项目。

我想知道这两种执行模式之间的区别是什么,尤其是当使用 sbt run 运行时,当它使用 spark-submit 完美运行时会抛出 java.lang.InterruptedException。

谢谢!

【问题讨论】:

  • sbt run 将在您的本地机器上运行您的项目 - 它有利于在开发期间进行本地测试/调试。 spark-submit 是在生产环境中运行项目的首选方式,尤其是因为它将处理您的程序在集群中的分布。

标签: scala apache-spark sbt spark-submit


【解决方案1】:

SBT 是一种构建工具(我喜欢在 Linux 上运行),它并不一定意味着使用 Spark。碰巧它就像 IntelliJ 一样用于 Spark 应用程序。

您可以在 SBT 控制台下的单个 JVM 中打包运行应用程序,但不能大规模。因此,如果您创建了一个带有指定依赖项的 Spark 应用程序,SBT 将使用 package 编译代码并创建一个包含所需依赖项等的 jar 文件以在本地 运行

您还可以在 SBT 中使用 assembly 选项,该选项创建一个 uber jarfat jar,所有依赖项包含在您上传到的 jar 中您的集群并通过调用 spark-submit 运行。因此,同样,如果您创建了一个带有指定依赖项的 Spark 应用程序,SBT 将通过汇编、编译代码并创建一个包含所有必需依赖项等的 uber jar 文件,但您需要发送给 Workers 的外部文件除外。在您的集群上运行(通常)。

【讨论】:

  • 谢谢!很透彻的解释。因此,如果我理解得很好,“sbt run”将在本地执行 spark 应用程序,即使我在 SparkConf 对象中指定我想使用本地以外的另一个 master(例如 YARN 或 MESOS)?
  • 从未尝试过。我是一名 SBT 装配工!我从来没有在程序内部设置配置和模式。见spark.apache.org/docs/latest/configuration.html
【解决方案2】:

Spark Sbt 和 Spark-submit 是两个完全不同的东西

  1. Spark sbt 是构建工具。如果你已经创建了 spark 应用,sbt 将帮助你编译该代码并创建一个包含所需依赖项等的 jar 文件。
  2. Spark-submit 用于向集群管理器提交 Spark 作业。您可能使用独立、Mesos 或 Yarn 作为集群管理器。 spark-submit 会将您的作业提交给集群管理器,您的作业将在集群上启动。

希望这会有所帮助。

干杯!

【讨论】:

  • 不回答问题,也不完全正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
相关资源
最近更新 更多