火花作业部署失败到cloudera

时间:2016-03-28 10:27:41

标签: apache-spark guice cloudera spark-streaming cloudera-cdh

我正在开发我的火花刺激程序时使用guice架构。它可以在我的日食中运行而没有任何错误。但是,在使用spark-submit命令进行编译和部署之后,它将返回错误:

java.lang.NoClassDefFoundError: com/google/common/base/Preconditions

在谷歌搜索后,我注意到只有在使用guice 3.0时才会出现此错误。但我正在使用guice 4.0。我的火花版本是1.5.2,我的cloudera版本是5.3.2。有没有解决这个错误?

1 个答案:

答案 0 :(得分:1)

不幸的是,Spark v1.5.2取决于com.google.inject:guice:3.0

所以我怀疑正在发生的事情是你的项目正在拉动两者:

  • Guice 4.0(作为您的依赖项文件中指定的直接依赖项,如pom.xmlbuild.sbt);和
  • Guice 3.0(由Spark v1.5.2拉动的传递依赖)

基本上你的类路径最终变得一团糟,并且根据类加载器在运行时加载类的方式,你将(或不会)遇到这种类型的错误。

你必须使用已经provided版本的Guice(由Spark拉动)或者开始玩类加载器。

更新:

确实org.apache.spark:spark-core_2.10:1.5.2com.google.inject:guice:3.0

 +-org.apache.spark:spark-core_2.10:1.5.2 [S]
   + ...
...
   +-org.apache.hadoop:hadoop-client:2.2.0
   | +-org.apache.hadoop:hadoop-mapreduce-client-app:2.2.0
   | | +-com.google.protobuf:protobuf-java:2.5.0
   | | +-org.apache.hadoop:hadoop-mapreduce-client-common:2.2.0
   | | | +-com.google.protobuf:protobuf-java:2.5.0
   | | | +-org.apache.hadoop:hadoop-mapreduce-client-core:2.2.0
   | | | | +-com.google.protobuf:protobuf-java:2.5.0
   | | | | +-org.apache.hadoop:hadoop-yarn-common:2.2.0 (VIA PARENT org.apache.hadoop:hadoop-yarn:2.2.0 and then VIA ITS PARENT org.apache.hadoop:hadoop-project:2.2.0)
   | | | | | +-com.google.inject:guice:3.0
...

spark-core pom.xmlhere

hadoop-yarn-common pom.xmlhere

hadoop-yarn pom.xmlhere

hadoop-project pom.xmlhere