Apache spark Spark作业部署到cloudera失败

Apache spark Spark作业部署到cloudera失败,apache-spark,guice,cloudera,spark-streaming,cloudera-cdh,Apache Spark,Guice,Cloudera,Spark Streaming,Cloudera Cdh,在开发spark strreaming程序时,我正在使用guice体系结构。它可以在我的eclipse中运行,没有任何错误。但是,在使用spark submit命令编译和部署后,它返回一个错误: java.lang.NoClassDefFoundError: com/google/common/base/Preconditions 在谷歌搜索之后,我注意到只有在使用guice 3.0时才会出现此错误。但我使用的是guice 4.0。我的spark版本是1.5.2,cloudera版本是5.3.

在开发spark strreaming程序时,我正在使用guice体系结构。它可以在我的eclipse中运行,没有任何错误。但是,在使用spark submit命令编译和部署后,它返回一个错误:

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

在谷歌搜索之后,我注意到只有在使用guice 3.0时才会出现此错误。但我使用的是guice 4.0。我的spark版本是1.5.2,cloudera版本是5.3.2。是否有解决此错误的方法?

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

因此,我怀疑正在发生的事情是,您的项目同时拉动了:

  • Guice 4.0
    (作为依赖项文件中声明的直接依赖项,如
    pom.xml
    build.sbt
    );及
  • Guice 3.0
    (由
    Spark v1.5.2
    产生的可传递依赖项)
基本上,您的类路径最终会变得一团糟,根据类加载器在运行时加载类的方式,您将(或不会)遇到此类错误

您必须使用已经提供的版本的Guice(由Spark拉动),或者开始使用类加载器


更新:

实际上,
org.apache.spark:spark-core_2.10:1.5.2
pulls
com.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.xml

hadoop纱线的公共
pom.xml

hadoop纱线
pom.xml


hadoop项目
pom.xml
是。

您有pom.xml的参考资料吗?我怀疑我的类路径一团糟。哈哈,我找不到任何依赖于guice本身的pom.xml,这很尴尬。但是,如果我使用“spark core”v1.5.2作为依赖项创建一个胖jar,我可以看到包含了Guice 3.0(为什么我得出了前面的结论)。一旦我有了更多的信息,并且我明白了为什么会发生这种情况,我会马上给你回复。@DericDominic你看:)谢谢你的推荐。:)