【问题标题】:How to create single jar in scala with sbt assembly on AWS EMR? Running into deduplicate: different file contents found in the following: errors如何在 AWS EMR 上使用 sbt 程序集在 scala 中创建单个 jar?遇到重复数据删除:在以下内容中发现不同的文件内容:错误
【发布时间】:2020-05-31 17:10:00
【问题描述】:

我在一个刚刚站起来的 AWS EMR 集群上,有一个 scala 文件编译和一个我想构建到程序集中的文件。但是,当我发出 sbt 程序集时,我遇到了重复数据删除错误。

根据https://medium.com/@tedherman/compile-scala-on-emr-cb77610559f0,我最初有一个符号链接,用于我的 lib 到 usr lib spark jars;

ln -s /usr/lib/spark/jars lib

尽管我注意到我的代码通过了 sbt 编译,不管有没有这个。但是,我很困惑为什么/如何解决 sbt 程序集重复错误。我还要注意,我根据文章在引导操作中安装了 sbt。

带有符号链接

一些重复数据删除似乎是明确的完全重复数据;示例:

[error] deduplicate: different file contents found in the following:
[error] /home/hadoop/.ivy2/cache/org.apache.parquet/parquet-jackson/jars/parquet-jackson-1.10.1.jar:shaded/parquet/org/codehaus/jackson/util/CharTypes.class
[error] /usr/lib/spark/jars/parquet-jackson-1.10.1-spark-amzn-1.jar:shaded/parquet/org/codehaus/jackson/util/CharTypes.class

其他似乎是竞争版本;

[error] deduplicate: different file contents found in the following:
[error] /home/hadoop/.ivy2/cache/org.apache.spark/spark-core_2.11/jars/spark-core_2.11-2.4.3.jar:org/spark_project/jetty/util/MultiPartOutputStream.class
[error] /usr/lib/spark/jars/spark-core_2.11-2.4.5-amzn-0.jar:org/spark_project/jetty/util/MultiPartOutputStream.class

我不明白为什么会有竞争版本;或者默认情况下它们是这样的,或者我做了一些介绍它们。

没有符号链接

我认为如果我删除它,我的问题会更少;虽然我仍然有受骗者(只是更少);

[error] deduplicate: different file contents found in the following:
[error] /home/hadoop/.ivy2/cache/org.apache.hadoop/hadoop-yarn-api/jars/hadoop-yarn-api-2.6.5.jar:org/apache/hadoop/yarn/factory/providers/package-info.class
[error] /home/hadoop/.ivy2/cache/org.apache.hadoop/hadoop-yarn-common/jars/hadoop-yarn-common-2.6.5.jar:org/apache/hadoop/yarn/factory/providers/package-info.class

考虑到一个是 hadoop-yarn-api-2.6.5.jar 而另一个是 hadoop-yarn-common-2.6.5.jar,我不明白为什么上面是骗子。不同的名字,为什么要上当?

其他似乎是版本;

[error] deduplicate: different file contents found in the following:
[error] /home/hadoop/.ivy2/cache/javax.inject/javax.inject/jars/javax.inject-1.jar:javax/inject/Named.class
[error] /home/hadoop/.ivy2/cache/org.glassfish.hk2.external/javax.inject/jars/javax.inject-2.4.0-b34.jar:javax/inject/Named.class

有些文件名相同,但路径/jar 不同...

[error] deduplicate: different file contents found in the following:
[error] /home/hadoop/.ivy2/cache/org.apache.arrow/arrow-format/jars/arrow-format-0.10.0.jar:git.properties
[error] /home/hadoop/.ivy2/cache/org.apache.arrow/arrow-memory/jars/arrow-memory-0.10.0.jar:git.properties
[error] /home/hadoop/.ivy2/cache/org.apache.arrow/arrow-vector/jars/arrow-vector-0.10.0.jar:git.properties

这些也一样……

[error] deduplicate: different file contents found in the following:
[error] /home/hadoop/.ivy2/cache/org.apache.spark/spark-catalyst_2.11/jars/spark-catalyst_2.11-2.4.3.jar:org/apache/spark/unused/UnusedStubClass.class
[error] /home/hadoop/.ivy2/cache/org.apache.spark/spark-core_2.11/jars/spark-core_2.11-2.4.3.jar:org/apache/spark/unused/UnusedStubClass.class
[error] /home/hadoop/.ivy2/cache/org.apache.spark/spark-graphx_2.11/jars/spark-graphx_2.11-2.4.3.jar:org/apache/spark/unused/UnusedStubClass.class

供参考,其他一些信息

导入到我的 scala 对象中

import org.apache.spark.sql.SparkSession
import java.time.LocalDateTime
import com.amazonaws.regions.Regions
import com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder
import com.amazonaws.services.secretsmanager.model.GetSecretValueRequest
import org.json4s.{DefaultFormats, MappingException}
import org.json4s.jackson.JsonMethods._
import com.datarobot.prediction.spark.Predictors.{getPredictorFromServer, getPredictor}

我的 build.sbt

libraryDependencies ++= Seq(
  "net.snowflake" % "snowflake-jdbc" % "3.12.5",
  "net.snowflake" % "spark-snowflake_2.11" % "2.7.1-spark_2.4",
  "com.datarobot" % "scoring-code-spark-api_2.4.3" % "0.0.19",
  "com.datarobot" % "datarobot-prediction" % "2.1.4",
  "com.amazonaws" % "aws-java-sdk-secretsmanager" % "1.11.789",
  "software.amazon.awssdk" % "regions" % "2.13.23"
) 

想法?请指教。

【问题讨论】:

    标签: apache-spark amazon-ec2 sbt


    【解决方案1】:

    您将需要mergeStrategy 设置 (docs)。

    “随机示例:”

    assemblyMergeStrategy in assembly := {
      case PathList("META-INF", _)       => MergeStrategy.discard
      case PathList("git.properties", _) => MergeStrategy.discard
      case "application.conf"            => MergeStrategy.concat
      case "reference.conf"              => MergeStrategy.concat
      case _                             => MergeStrategy.first
    }
    

    【讨论】:

    • 谢谢 - 有不少错误,但我知道现在应该如何解决它们。实际上可以通过指定 --packages 来避免这种工作,谢天谢地!
    猜你喜欢
    • 1970-01-01
    • 2014-06-10
    • 2016-03-22
    • 2021-02-27
    • 2019-07-04
    • 2017-05-21
    • 2015-05-22
    • 2014-11-13
    • 2018-10-04
    相关资源
    最近更新 更多