线程“main”中的异常java.lang.NoClassDefFoundError:org / apache / spark / Logging

时间:2016-08-29 18:35:14

标签: apache-spark

我是Spark的新手。我尝试在Oracle VirtualBox 5.1.4r110228上运行CDH 5.8.0-0上的Spark应用程序(.jar),该应用程序利用Spark Steaming在twitter上执行情绪分析。我创建了自己的Twitter帐户,并生成了所有必需的(4)令牌。我被import FaBeer from 'react-icons/lib/fa/beer'; 例外阻止了。

我一直在谷歌上搜索几天。我到目前为止找到的最好的建议是在下面的URL中,但显然我的环境仍然遗漏了一些东西。

http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html#ixzz4Ia99dsp0

Runile中缺少Compile中出现的库是什么意思?我们如何解决这个问题?

什么是Logging库?我看到一篇文章说这个Logging可能会被弃用。除此之外,我确实在我的环境中看到了log4j。

在我的CDH 5.8中,我正在运行这些版本的软件:  Spark-2.0.0-bin-hadoop2.7 / spark-core_2.10-2.0.0  jdk-8u101-linux-x64 / jre-bu101-linux-x64

我在最后添加了例外的细节。以下是我执行应用程序时执行的程序以及在执行异常后执行的一些验证:

  1. 解压缩twitter-streaming.zip(Spark应用)
  2. cd twitter-streaming
  3. 运行./sbt/sbt assembly
  4. 使用您的Twitter帐户更新env.sh
  5. $ cat env.sh

    NoClassDefFoundError

    submit.sh脚本在env.sh中包含了spark-submit命令以及所需的凭据信息:

    $ cat submit.sh

    export SPARK_HOME=/home/cloudera/spark-2.0.0-bin-hadoop2.7
    export CONSUMER_KEY=<my_consumer_key>
    export CONSUMER_SECRET=<my_consumer_secret>
    export ACCESS_TOKEN=<my_twitterapp_access_token>
    export ACCESS_TOKEN_SECRET=<my_twitterapp_access_token>
    

    装配过程的日志: [cloudera @ quickstart twitter-streaming] $ ./sbt/sbt assembly

    source ./env.sh
    $SPARK_HOME/bin/spark-submit --class "TwitterStreamingApp" --master local[*] ./target/scala-2.10/twitter-streaming-assembly-1.0.jar $CONSUMER_KEY $CONSUMER_SECRET $ACCESS_TOKEN $ACCESS_TOKEN_SECRET
    

    当我运行Hadoop NativeCheck时,不确定它究竟是什么意思,但一切都很好看:

    $ hadoop checknative -a

    Launching sbt from sbt/sbt-launch-0.13.7.jar
    [info] Loading project definition from /home/cloudera/workspace/twitter-streaming/project
    [info] Set current project to twitter-streaming (in build file:/home/cloudera/workspace/twitter-streaming/)
    [info] Including: twitter4j-stream-3.0.3.jar
    [info] Including: twitter4j-core-3.0.3.jar
    [info] Including: scala-library.jar
    [info] Including: unused-1.0.0.jar
    [info] Including: spark-streaming-twitter_2.10-1.4.1.jar
    [info] Checking every *.class/*.jar file's SHA-1.
    [info] Merging files...
    [warn] Merging 'META-INF/LICENSE.txt' with strategy 'first'
    [warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard'
    [warn] Merging 'META-INF/maven/org.spark-project.spark/unused/pom.properties' with strategy 'first'
    [warn] Merging 'META-INF/maven/org.spark-project.spark/unused/pom.xml' with strategy 'first'
    [warn] Merging 'log4j.properties' with strategy 'discard'
    [warn] Merging 'org/apache/spark/unused/UnusedStubClass.class' with strategy 'first'
    [warn] Strategy 'discard' was applied to 2 files
    [warn] Strategy 'first' was applied to 4 files
    [info] SHA-1: 69146d6fdecc2a97e346d36fafc86c2819d5bd8f
    [info] Packaging /home/cloudera/workspace/twitter-streaming/target/scala-2.10/twitter-streaming-assembly-1.0.jar ...
    [info] Done packaging.
    [success] Total time: 6 s, completed Aug 27, 2016 11:58:03 AM
    

    以下是我的异常的控制台日志: $ ./submit.sh

    16/08/27 13:27:22 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
    16/08/27 13:27:22 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
    Native library checking:
    hadoop:  true /usr/lib/hadoop/lib/native/libhadoop.so.1.0.0
    zlib:    true /lib64/libz.so.1
    snappy:  true /usr/lib/hadoop/lib/native/libsnappy.so.1
    lz4:     true revision:10301
    bzip2:   true /lib64/libbz2.so.1
    openssl: true /usr/lib64/libcrypto.so
    

    我理解我的帖子很冗长。非常感谢您的建议或见解!!

    -jsung8

5 个答案:

答案 0 :(得分:0)

火花1.5.2后删除了

org / apache / spark / logging。

由于你的spark-core版本是2.0,那么最简单的解决方案是:

  

下载单个 spark-core_2.11-1.5.2.logging.jar 并将其放入spark根目录下的 jars 目录中。

无论如何,它解决了我的问题,希望它有所帮助。

答案 1 :(得分:0)

可能导致此问题的一个原因是 lib和类冲突。 我遇到了这个问题并使用一些 maven排除

解决了这个问题
   <dependency>
       <groupId>org.apache.spark</groupId>
       <artifactId>spark-core_2.11</artifactId>
       <version>2.0.0</version>
       <scope>provided</scope>
       <exclusions>
           <exclusion>
               <groupId>log4j</groupId>
               <artifactId>log4j</artifactId>
           </exclusion>
       </exclusions>
   </dependency>

   <dependency>
       <groupId>org.apache.spark</groupId>
       <artifactId>spark-streaming_2.11</artifactId>
       <version>2.0.0</version>
       <scope>provided</scope>
   </dependency>

   <dependency>
       <groupId>org.apache.spark</groupId>
       <artifactId>spark-streaming-kafka-0-10_2.11</artifactId>
       <version>2.0.0</version>
       <exclusions>
           <exclusion>
               <groupId>org.slf4j</groupId>
               <artifactId>slf4j-log4j12</artifactId>
           </exclusion>
           <exclusion>
               <groupId>log4j</groupId>
               <artifactId>log4j</artifactId>
           </exclusion>
       </exclusions>
   </dependency>

答案 2 :(得分:0)

使用:spark-core_2.11-1.5.2.jar

我遇到了@ jsung8描述的同样的问题,并试图找到@youngstephen建议的.jar,但不能。但是,spark-core_2.11-1.5.2.jar而不是spark-core_2.11-1.5.2.logging.jar中的链接以@youngstephen建议的方式解决了异常。

答案 3 :(得分:0)

您正在使用旧版本的Spark Twitter连接器。堆栈跟踪中的这个类提示:

org.apache.spark.streaming.twitter.TwitterUtils

Spark在版本2.0中删除了该集成。您正在使用旧Spark版本中引用旧版Logging类的版本,该版本移动到Spark 2.0中的其他软件包。

如果您想使用Spark 2.0,您需要使用Bahir项目中的Twitter连接器。

答案 4 :(得分:0)

由于以下错误,Spark内核版本应降级为1.5

java.lang.NoClassDefFoundError: org/apache/spark/Logging

http://bahir.apache.org/docs/spark/2.0.0/spark-streaming-twitter/为此提供了更好的解决方案。通过添加以下依赖项,我的问题得到了解决。

 <dependency>
<groupId>org.apache.bahir</groupId>
<artifactId>spark-streaming-twitter_2.11</artifactId>
<version>2.0.0</version>
</dependency>