Hadoop зависит от двух разных версий beanutils

Hadoop 2.4.0 зависит от двух разных версий beanutils, что вызывает следующую ошибку с sbt-assembly:

[error] (*:assembly) deduplicate: different file contents found in the following:
[error] .ivy2/cache/commons-beanutils/commons-beanutils/jars/commons-beanutils-1.7.0.jar:org/apache/commons/beanutils/BasicDynaBean.class
[error] .ivy2/cache/commons-beanutils/commons-beanutils-core/jars/commons-beanutils-core-1.8.0.jar:org/apache/commons/beanutils/BasicDynaBean.class

Обе эти зависимости являются переходными от Hadoop 2.4.0, что подтверждается с помощью Как получить прямой доступ к Ivy, т.е. получить доступ к отчетам о зависимостях или выполнить команды Ivy?

Как сделать sbt-сборку, включающую Hadoop 2.4.0?

ОБНОВЛЕНИЕ: В соответствии с просьбой, вот зависимости build.sbt:

libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "2.4.0"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.0.0"  % "provided" exclude("org.apache.hadoop", "hadoop-client")

resolvers += "Akka Repository" at "http://repo.akka.io/releases/"

libraryDependencies += "com.amazonaws" % "aws-java-sdk" % "1.7.8"

libraryDependencies += "commons-io" % "commons-io" % "2.4"

libraryDependencies += "javax.servlet" % "javax.servlet-api" % "3.0.1" % "provided"

libraryDependencies += "com.sksamuel.elastic4s" %% "elastic4s" % "1.1.1.0"

exclude hadoop необходим, потому что Spark по умолчанию включает Hadoop 1, который конфликтует с Hadoop 2.


person SRobertJames    schedule 27.06.2014    source источник
comment
Можете ли вы добавить build.sbt со своими зависимостями?   -  person lpiepiora    schedule 27.06.2014
comment
@lpiepiora - Готово, не могли бы вы взглянуть?   -  person SRobertJames    schedule 29.06.2014
comment
Проблема в том, что искровое ядро, которое находится в репозитории, построено для Hadoop 1. Даже если вы решите проблему с зависимостями, которая у вас есть в настоящее время, вы столкнетесь со следующими проблемами (я проверял это). Возможно, вы можете рассмотреть возможность клонирования Spark и создания собственной версии для Hadoop 2 (сборка Spark, похоже, поддерживает это)   -  person lpiepiora    schedule 29.06.2014
comment
@lpiepiora Спасибо; Можете представить ошибку? Вы уверены, что единственный способ использовать Spark с Hadoop 2 — это построить его с нуля? На домашней странице Spark spark.apache.org/downloads.html предлагаются готовые сборки для Hadoop 2, но только один пример мавена   -  person SRobertJames    schedule 29.06.2014
comment
Это была просто ошибка с некоторыми другими зависимостями. Тот, который у вас уже был, но связанный с hadoop-yarn-common-2.4.0.jar. Я думаю, вы могли бы решить их все, но это похоже на путь через ад зависимостей. Возможно, вы могли бы включить его в качестве ссылки на проект, который будет автоматически создан из git. Я видел, что spark можно загрузить как предварительно собранный для hadoop 2, поэтому я сказал, что у них есть поддержка hadoop 2 в процессе сборки, но я думаю, что они не публикуют эту версию в репозитории maven.   -  person lpiepiora    schedule 29.06.2014


Ответы (1)


Попробуйте добавить стратегию слияния в build.sbt

Как ниже

val meta = """META.INF(.)*""".r

mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
  {
    case PathList("javax", "servlet", xs @ _*) => MergeStrategy.last
    case PathList("javax", "activation", xs @ _*) => MergeStrategy.last
    case PathList("org", "apache", xs @ _*) => MergeStrategy.last
    case PathList("com", "esotericsoftware", xs @ _*) => MergeStrategy.last
    case PathList("plugin.properties") => MergeStrategy.last
    case meta(_) => MergeStrategy.discard
    case x => old(x)
  }
}
person Artem N.    schedule 09.10.2014
comment
org.apache слишком агрессивен, имхо - person Leo Romanovsky; 19.04.2016