将Spark作业部署到cloudera失败



我在开发我的spark strreaming程序时使用了guide架构。它可以在我的eclipse中运行而不会出现任何错误。然而,在使用spark-submit命令编译和部署后,它返回一个错误:

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

在谷歌上搜索后,我注意到只有当我们使用的是guide3.0时才会出现这个错误。但我使用的是guide 4.0。我的spark版本是1.5.2,cloudera版本是5.3.2。这个错误有什么解决办法吗?

很遗憾,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.2拉动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-yarn-common pom.xml在这里。

hadoop-yarn pom.xml在这里。

hadoop-project pom.xml在这里。

相关内容

  • 没有找到相关文章

最新更新