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

我总是收到以下错误。有人可以帮我吗?

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/Logging at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) at java.net.URLClassLoader.access$100(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:368) at 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) at com.datastax.spark.connector.japi.DStreamJavaFunctions.(DStreamJavaFunctions.java:24) at com.datastax.spark.connector.japi.CassandraStreamingJavaUtil.javaFunctions(CassandraStreamingJavaUtil.java:55) at SparkStream.main(SparkStream.java:51) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) Caused by: 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) ... 20 more 

当我编译以下代码时。 我在网上搜索过但没有找到解决方案。 当我添加saveToCassandra时,我遇到了错误。

 import com.datastax.spark.connector.japi.CassandraStreamingJavaUtil; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.streaming.Duration; import org.apache.spark.streaming.api.java.JavaDStream; import org.apache.spark.streaming.api.java.JavaPairInputDStream; import org.apache.spark.streaming.api.java.JavaStreamingContext; import org.apache.spark.streaming.kafka.KafkaUtils; import java.io.Serializable; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; import static com.datastax.spark.connector.japi.CassandraJavaUtil.mapToRow; /** * Created by jonas on 10/10/16. */ public class SparkStream implements Serializable{ public static void main(String[] args) throws Exception{ SparkConf conf = new SparkConf(true) .setAppName("TwitterToCassandra") .setMaster("local[*]") .set("spark.cassandra.connection.host", "127.0.0.1") .set("spark.cassandra.connection.port", "9042"); ; JavaSparkContext sc = new JavaSparkContext(conf); JavaStreamingContext ssc = new JavaStreamingContext(sc, new Duration(5000)); Map kafkaParams = new HashMap(); kafkaParams.put("bootstrap.servers", "localhost:9092"); Set topics = Collections.singleton("Test"); JavaPairInputDStream directKafkaStream = KafkaUtils.createDirectStream( ssc, String.class, String.class, kafka.serializer.StringDecoder.class, kafka.serializer.StringDecoder.class, kafkaParams, topics ); JavaDStream createTweet = directKafkaStream.map(s -> createTweet(s._2)); CassandraStreamingJavaUtil.javaFunctions(createTweet) .writerBuilder("mykeyspace", "rawtweet", mapToRow(Tweet.class)) .saveToCassandra(); ssc.start(); ssc.awaitTermination(); } public static Tweet createTweet(String rawKafka){ String[] splitted = rawKafka.split("\\|"); Tweet t = new Tweet(splitted[0], splitted[1], splitted[2], splitted[3]); return t; } } 

我的pom如下。

   4.0.0 com.company Sentiment 1.0-SNAPSHOT    org.apache.maven.plugins maven-compiler-plugin  1.8 1.8       twitter4j.org twitter4j.org Repository http://twitter4j.org/maven2  true   true      org.apache.spark spark-streaming_2.11 2.0.1   org.apache.spark spark-core_2.10 2.0.0   org.apache.spark spark-sql_2.10 2.0.0   org.apache.spark spark-streaming-kafka-0-8_2.11 2.0.1    org.scala-lang scala-library 2.11.8    com.datastax.spark spark-cassandra-connector_2.10 1.6.2   org.apache.kafka kafka_2.10 0.9.0.0   org.twitter4j twitter4j-core [4.0,)   org.twitter4j twitter4j-stream 4.0.4   org.twitter4j twitter4j-async 4.0.4    

org.apache.spark.Logging在Spark 1.5.2或更低版本中可用。 它不在2.0.0中。 请按以下方式更改版本

   org.apache.spark spark-streaming_2.11 1.5.2   org.apache.spark spark-core_2.10 1.5.2   org.apache.spark spark-sql_2.10 1.5.2   org.apache.spark spark-streaming-kafka-0-8_2.11 1.6.2  

该错误是因为您使用Spark 2.0库和Spark 1.6的连接器(它查找Spark 1.6日志记录类。使用2.0.5版本的连接器。

我通过改变上面提到的jar得到了解决方案。

最初,我正在为spark-kafka-streaming降级jar:

  org.apache.spark spark-streaming-kafka-0-8_2.11 2.1.1 

我还删除了我从spark和kafka jar库外部添加的多个sl4j-log4j.jars和log4j.jars。

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

  org.apache.spark spark-core_2.11 2.0.0 provided   log4j log4j     org.apache.spark spark-streaming_2.11 2.0.0 provided   org.apache.spark spark-streaming-kafka-0-10_2.11 2.0.0   org.slf4j slf4j-log4j12   log4j log4j    

这个pom.xml解决了我的问题:

   org.apache.spark spark-core_2.10 1.6.1   org.apache.spark spark-streaming_2.10 1.6.1  

下载jar并在spark-submit中使用–jars,为我工作spark-submit –class com.SentimentTwiteer –packages“org.apache.spark:spark-streaming-twitter_2.11:1.6.3”–jars /root/Desktop/spark-core_2.11-1.5.2.logging.jar /root/Desktop/SentimentTwiteer.jar XX XX XX XX

下载spark-core_2.11-1.5.2.logging.jar并使用–jar选项

spark-submit –class com.SentimentTwiteer –packages“org.apache.spark:spark-streaming-twitter_2.11:1.6.3”–jars /root/Desktop/spark-core_2.11-1.5.2.logging .jar /root/Desktop/SentimentTwiteer.jar consumerKey consumerSecret accessToken accessTokenSecret yoursearchTag

https://github.com/sinhavicky4/SentimentTwiteer

这是因为自1.5.2以来缺少org.apache.spark.Logging类,就像每个人都说的那样。 (在以后的版本中只存在org.apache.spark.internal.Logging …)

但似乎没有针对maven的解决方案可以解决这种依赖关系,所以我只是尝试手动将这个类添加到lib。 这是解决问题的方法:

  1. 将scala org.apache.spark.internal.Logging打包到公共jar中。 或者从https://raw.githubusercontent.com/swordsmanliu/SparkStreamingHbase/master/lib/spark-core_2.11-1.5.2.logging.jar下载(感谢这位主持人。)

  2. 将jar移动到spark集群的jars目录中。

  3. 再次提交您的项目,希望它能帮助您。

在依赖项jar列表中缺少日志记录Jar。 尝试从mvn存储库下载“spark-core_2.11-1.5.2.logging”jar,然后将它作为外部jar添加到你的spark项目中,你不会得到“java.lang.NoClassDefFoundError:org / apache / spark /记录“错误。 基于scala版本,您可以下载jar {2.10,2.11等}。

它的版本问题尝试使用最新版本

  org.apache.spark spark-sql_2.11 2.1.0 provided   org.apache.spark spark-streaming-kafka-0-8_2.11 2.1.1   org.apache.spark spark-streaming_2.11 2.1.0   org.apache.spark spark-core_2.11 2.1.0