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

标签 scala apache-spark sbt spark-submit

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

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

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

谢谢!

最佳答案

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

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

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

关于scala - 使用 sbt run 或使用 spark-submit 脚本运行 spark 应用程序的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53902625/

相关文章:

scala - Play Framework JsNumber 参数转换为 Any 类型

Scala:将 Map[K,V] 转换为 IntMap[V] 的最有效方法是什么?

scala - 将 build.sbt 与 project/Build.scala 和聚合混合

scala - 从文本文件在spark中创建一对RDD并应用reduceByKey时出现问题

scala - Scala 中的 ?0 类型是什么?

apache-spark - 如何从 RDD 中获取最后一个值?

scala - 在 spark scala 中使用窗口函数删除重复记录

apache-spark - 从 PySpark 连接到 MSSQL

docker - 在Docker中以开发人员模式运行Play应用程序

找不到 sbt 程序集命令