Scala 2.11 Spark 2.0 hortonworks-spark/shc sbt assemby



我尝试使用hortonworks-spark/shc来汇编Scala 2.11 Spark 2.0应用程序。

依赖项集看起来很简单:

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "2.0.2" % "provided",
  "com.hortonworks" % "shc-core" % "1.0.1-2.0-s_2.11"
)

当我尝试将应用程序组装到胖罐中时,问题出现了,因为有很多具有不同版本的瞬态依赖性,然后汇编插件抛出了重复错误。一个示例:

deduplicate: different file contents found in the following:
[error] /home/search/.ivy2/cache/org.mortbay.jetty/jsp-2.1/jars/jsp-2.1-6.1.14.jar:org/apache/jasper/xmlparser/XMLString.class
[error] /home/search/.ivy2/cache/tomcat/jasper-compiler/jars/jasper-compiler-5.5.23.jar:org/apache/jasper/xmlparser/XMLString.class

另外,我不知道它是否正确包含在org.apache.hbase等jar依赖项中:hbase-server:1.1.2

因此,基本上,问题是:有人知道使用此库和SBT组装Scala Spark应用程序的正确方法,并且可以提供一个示例?(也许将其添加到hortonworks spark/shc

的文档中

注意:hortonworks spark/shc不包含在火花包装中,因此,如果不与罐子的本地副本一起使用 - 包装选项。我正在使用EMR,所以我没有一个预配置的群集,其中复制jar而不增加部署的复杂性。

您应该指定readme中提到的Mergestrategy。您可以在火花节点上提供常见的库,而不是每次将它们包括在fat.jar中。这样做的路是将它们上传到每个工人上并添加到ClassPath。

您可以看到jasper-xmlparser正在使用两个不同的罐子。所以重复。您可以将参考排除在其中一个,如下所示

例如:library Depentencies =" org.apache.hbase"%" hbase-server"%" 0.98.12-HADOOP2" DESSUBLUDEALL DEXBUSIONR(组织=" org.mortbay.jetty")

以及将所有依赖项添加到胖罐中,至少是用于火花应用的,这是处理罐子组件的建议方法。最常见的罐子(例如Spark,HBase等)可以成为边缘节点上类路径的一部分或您正在运行的节点。任何其他特定的罐子,都可以成为Uber Jar的一部分。您可以按照提供的火花/HBase罐子。

很好,核心应帮助您进行基本操作。

libraryDependencies += "org.apache.hbase" % "hbase-client" % "0.98.12-hadoop2" // % "provided"
libraryDependencies += "org.apache.hbase" % "hbase-common" % "0.98.12-hadoop2"  //% "provided"
libraryDependencies += "org.apache.hbase" % "hbase-server" % "0.98.12-hadoop2" excludeAll ExclusionRule(organization = "org.mortbay.jetty")

您必须在build.sbt中提供Mergentrategy,

看起来像这样,

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

在此示例中,我指定了 Mergestrategy.first 。还有其他选项,例如 Mergestrategy.last Mergestrategy.concat

Mergestrategy.First意味着它将为创建Uber Jar的给定依赖项选择它看到的第一个罐子。

在某些情况下可能行不通,如果是这样,请尝试Mergestrategy.last也。

相关内容

  • 没有找到相关文章