【问题标题】:Proper way to make a Spark Fat Jar using SBT使用 SBT 制作 Spark Fat Jar 的正确方法
【发布时间】:2015-08-05 13:03:16
【问题描述】:

我需要一个带有 Spark 的 Fat Jar,因为我正在为 Knime 创建一个自定义节点。基本上它是一个在 Knime 内部执行的独立 jar,我认为 Fat Jar 是生成本地 Spark Job 的唯一方法。最终我们将继续向远程集群提交作业,但现在我需要它以这种方式生成。

也就是说,我用这个做了一个 Fat Jar:https://github.com/sbt/sbt-assembly

我创建了一个空的 sbt 项目,在依赖项中包含 Spark-core 并组装了 Jar。我将它添加到我的自定义 Knime 节点的清单中,并尝试生成一个简单的作业(并行化集合,收集并打印它)。它开始了,但我收到了这个错误:

未找到密钥“akka.version”的配置设置

我不知道如何解决它。

编辑:这是我的 build.sbt

name := "SparkFatJar"

version := "1.0"

scalaVersion := "2.11.6"

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "1.3.0"
)


libraryDependencies +=  "com.typesafe.akka" %% "akka-actor" % "2.3.8"

assemblyJarName in assembly := "SparkFatJar.jar"

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", xs @ _*) => MergeStrategy.discard
  case x => MergeStrategy.first
}

我在 Internet 上的某个地方找到了 Spark 的这种合并策略,但我现在找不到源。

【问题讨论】:

  • 你使用的是什么版本的 sbt-assembly?您能否提供更多细节,也许是重现问题的最小构建设置?
  • 如果你将master设置为local[*]呢?
  • @JustinPihony 它已经设置好了
  • @DaleWijnand 0.13。使用更多信息编辑顶部帖子。

标签: scala jar apache-spark sbt sbt-assembly


【解决方案1】:

我认为问题在于您如何设置 assemblyMergeStrategy。试试这个:

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", xs @ _*) => MergeStrategy.discard
  case "application.conf"            => MergeStrategy.concat
  case "reference.conf"              => MergeStrategy.concat
  case x =>
    val baseStrategy = (assemblyMergeStrategy in assembly).value
    baseStrategy(x)
}

【讨论】:

猜你喜欢
  • 2014-09-19
  • 2016-10-01
  • 1970-01-01
  • 2021-09-05
  • 2019-01-10
  • 2018-02-28
  • 2017-07-19
  • 2015-04-12
  • 2018-02-09
相关资源
最近更新 更多