0

我正在尝试 hbase-spark 连接器。首先,我正在尝试这段代码。

我的 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) 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 在 java.net.URLClassLoader.access$100(URLClassLoader.java:73) 在 java.net.URLClassLoader$1。在 java.net.URLClassLoader$1.run(URLClassLoader.java:362) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:361) 运行(URLClassLoader.java:368) ) 在 sun.misc 的 java.lang.ClassLoader.loadClass(ClassLoader.java:424)。Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at org.apache.hadoop.hbase.spark.JavaHBaseContext.(JavaHBaseContext.scala:46) at 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) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 还有 14 个scala:46) at com.myproj.poc.sparkhbaseneo4j.App.main(App.java:71) 原因:java.lang.ClassNotFoundException: org.apache.spark.Logging at java.net.URLClassLoader.findClass(URLClassLoader. java:381) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ) ... 14 更多scala:46) at com.myproj.poc.sparkhbaseneo4j.App.main(App.java:71) 原因:java.lang.ClassNotFoundException: org.apache.spark.Logging at java.net.URLClassLoader.findClass(URLClassLoader. java:381) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ) ... 14 更多331) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 还有 14 个331) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 还有 14 个

com.myproj.poc.sparkhbaseneo4j.App.main(App.java:71)是github 代码中的第 67 行。

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

或者我是否必须坚持1.X.X使用它的版本,因为这个答案说它在 1.5.2 版之后被删除?

4

1 回答 1

1

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

所以你应该使用以下或更高版本

<!-- 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>
于 2018-04-27T12:56:33.550 回答