【发布时间】:2021-03-24 11:28:24
【问题描述】:
我有 sbt.build 这样的,做 Spark 编程:
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "3.0.1" withSources(),
"com.datastax.spark" %% "spark-cassandra-connector" % "3.0.0" withSources()
...
)
由于我的程序使用 Spark 本身以外的其他库,我必须使用 sbt assembly 来生成一个 uber Jar,我可以将其用作 spark-submit 的参数,以便在我的 spark standalone 中运行这样的 spark 应用程序集群。
生成的uber-jar 输出就像一个魅力。
但是编译花费了很多时间,我发现这种方法太慢了,无法在我的开发中迭代。
我的意思是,在每次我想要测试的 Spark 应用程序代码更改时,我都必须运行另一个编译,使用 sbt 输出 uber-jar,并且每次都需要很长时间(至少 5 分钟)完成,然后才能在我的集群上运行它。
我知道我可以对build.sbt 进行一些优化以加快编译速度。但我认为它会保持缓慢。
所以,我的问题是,如果您知道还有其他方法可以完全避免构建 uber-jar 吗?
理想情况下,我想一个方法,我只需要触发sbt package(比sbt assembly 快很多),然后我就可以在spark-submit 级别或spark standalone 集群级别判断,要加载哪些额外的 jar。
但是,例如,spark-submit 似乎对此很清楚..
application-jar :包含您的应用程序和所有依赖项
的捆绑 jar 的路径
..所以我可能别无选择..
有什么可以加快我使用 Scala、SBT 和其他库的 Spark 开发速度的建议吗?
【问题讨论】:
标签: scala apache-spark sbt databricks apache-spark-standalone