Apache spark 获取java.lang.NoClassDefFoundError:kafka/serializer/StringDecoder从Spark streaming流式处理kafka时发生异常

Apache spark 获取java.lang.NoClassDefFoundError:kafka/serializer/StringDecoder从Spark streaming流式处理kafka时发生异常,apache-spark,apache-kafka,streaming,spark-streaming,spark-streaming-kafka,Apache Spark,Apache Kafka,Streaming,Spark Streaming,Spark Streaming Kafka,我正在尝试从spark流媒体应用程序读取kafka流媒体数据;在读取数据的过程中,我遇到以下异常: 16/12/24 11:09:05信息存储。BlockManager管理员:已注册的BlockManager Exception in thread "main" java.lang.NoClassDefFoundError: kafka/serializer/StringDecoder at com.inndata.RSVPSDataStreaming.KafkaToSparkStrea

我正在尝试从spark流媒体应用程序读取kafka流媒体数据;在读取数据的过程中,我遇到以下异常:

16/12/24 11:09:05信息存储。BlockManager管理员:已注册的BlockManager

Exception in thread "main" java.lang.NoClassDefFoundError: kafka/serializer/StringDecoder
    at com.inndata.RSVPSDataStreaming.KafkaToSparkStreaming.main(KafkaToSparkStreaming.java:69)
    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 org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: kafka.serializer.StringDecoder
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 10 more
以下是我的版本信息:

火花:1.6.2

卡夫卡:0.8.2

以下是pom.xml:

<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka_2.11 -->
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka_2.11</artifactId>
    <version>0.8.2.1</version>
</dependency>
<dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_2.11</artifactId>
            <version>1.6.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-streaming-kafka-0-8_2.11 -->
<dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming-kafka-0-8_2.11</artifactId>
            <version>2.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>0.8.2.1</version>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming-kafka-0-8-assembly_2.10</artifactId>
    <version>2.0.0-preview</version>
</dependency>

org.apache.kafka
卡夫卡2.11
0.8.2.1
org.apache.spark
spark-U 2.11
1.6.2
org.apache.spark
spark-streaming-kafka-0-8_2.11
2.0.0
org.apache.kafka
卡夫卡客户
0.8.2.1
org.apache.spark
spark-streaming-kafka-0-8-assembly_2.10
2.0.0-预览

似乎需要隐式字符串编码器 试着应用这个

import org.apache.spark.sql.Encoder
    implicit val stringpEncoder = org.apache.spark.sql.Encoders.kryo[String]

您可以从官方文件中找到关于编码器的更多信息,您可以使用不兼容和重复的工件版本。请记住,使用Spark时:

  • 所有Scala工件都必须使用相同的主要Scala版本(2.10、2.11)
  • 所有Spark工件都必须使用相同的主Spark版本(1.6、2.0)
在构建定义中,您将
spark streaming
1.6与
spark core
2.0混合使用,并为Scala 2.10包含重复的
spark streaming kafka
,而其余依赖项则为Scala 2.11。

使用此编码器stringEncoder=Encoders.STRING();在这里找到java中的示例