解决NoClassDefFoundError:org / apache / spark / Logging异常

时间:2018-04-27 12:23:50

标签: apache-spark hadoop hbase maven-dependency

我正在尝试使用hbase-spark连接器。首先,我正在尝试this代码。

我的pom依赖是:

<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-spark</artifactId>
        <version>2.0.0-alpha4</version>
    </dependency>
</dependencies>

我在运行代码时遇到异常:

  
    

线程“main”中的异常java.lang.NoClassDefFoundError:org / apache / spark / Logging             at java.lang.ClassLoader.defineClass1(Native Method)             at java.lang.ClassLoader.defineClass(ClassLoader.java:760)             at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)             at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)             在java.net.URLClassLoader.access $ 100(URLClassLoader.java:73)             在java.net.URLClassLoader $ 1.run(URLClassLoader.java:368)             在java.net.URLClassLoader $ 1.run(URLClassLoader.java:362)             at java.security.AccessController.doPrivileged(Native Method)             at java.net.URLClassLoader.findClass(URLClassLoader.java:361)             at java.lang.ClassLoader.loadClass(ClassLoader.java:424)             at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:331)             at java.lang.ClassLoader.loadClass(ClassLoader.java:357)             在org.apache.hadoop.hbase.spark.JavaHBaseContext。(JavaHBaseContext.scala:46)             在com.myproj.poc.sparkhbaseneo4j.App.main(App.java:71)         引起:java.lang.ClassNotFoundException:org.apache.spark.Logging             at java.net.URLClassLoader.findClass(URLClassLoader.java:381)             at java.lang.ClassLoader.loadClass(ClassLoader.java:424)             at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:331)             at java.lang.ClassLoader.loadClass(ClassLoader.java:357)             ......还有14个

  

com.myproj.poc.sparkhbaseneo4j.App.main(App.java:71)在github代码中是line 67

我查了this thread。它说我应该包括所有库的相同版本。早些时候,我的pom中有2.3.0版本的spark库。但我意识到hbase-spark有最新版本2.0.0。所以我将所有spark库的版本降级为2.0.0。但我仍然得到同样的例外。

或者我是否必须坚持1.X.X版本才能使用此版本,因为this回答说它已在版本1.5.2之后删除了?

1 个答案:

答案 0 :(得分:1)

Sean Owen http://community.cloudera.com/t5/Advanced-Analytics-Apache-Spark/Hit-quot-Exception-in-thread-main-java-lang-NoClassDefFoundError/td-p/44486中建议“你不应该在你的应用程序中使用org.apache.spark.Logging。这可能是问题和解决方案。”

所以你应该使用以下内容或higher version

<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.1</version>
</dependency>

更新了

  
    

我指定了,现在我得到NoClassDefFoundError:org / apache / spark / streaming / dstream / DStream

  

对于上述问题,您需要遵循依赖

<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-streaming -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming_2.11</artifactId>
    <version>2.0.0</version>
    <scope>provided</scope>
</dependency>