使用sbt run或使用spark-submit脚本运行spark应用程序的区别

时间:2018-12-23 09:51:09

标签: scala apache-spark sbt spark-submit

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

Spark Sbt和Spark-submit是2个完全不同的事物

  1. 火花sbt是构建工具。如果您已经创建了spark应用程序,则sbt将帮助您编译该代码并创建具有所需依赖项等的jar文件。
  2. 火花提交用于向群集管理器提交火花作业。您可能使用独立服务器,Mesos或Yarn作为群集管理器。 spark-submit会将您的工作提交给集群管理器,您的工作将从集群开始。

希望这会有所帮助。

干杯!

答案 1 :(得分:1)

SBT 是一个构建工具(我喜欢在Linux上运行),不一定暗示使用SPARK。碰巧的是,它像IntelliJ一样用于Spark应用程序。

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

您还可以在SBT中使用 assembly 选项,该选项会创建一个超级罐子胖罐子,并将所有依赖项包含在要上传到的罐子中您的集群并通过调用火花提交来运行。因此,再次,如果您创建了一个带有指示依赖项的Spark应用程序,SBT将通过汇编,编译代码并创建一个具有所有必需依赖项等的uber jar文件,除了需要运送到Workers的外部文件之外,在群集上运行(通常)。