获取java.lang.NoClassDefFoundError:kafka / serializer / StringDecoder从Spark流式传输kafka时出现异常

时间:2016-12-24 06:11:54

标签: apache-spark apache-kafka streaming spark-streaming spark-streaming-kafka

我正在尝试从火花流应用程序中读取kafka流数据;在阅读数据的过程中,我遇到了异常:

16/12/24 11:09:05 INFO storage.BlockManagerMaster:已注册的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

这是我的版本信息:

spark:1.6.2

kafka: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>

2 个答案:

答案 0 :(得分:0)

似乎需要隐式字符串编码器 尝试应用此

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

您可以在官方文档here

中找到有关编码器here的更多信息

答案 1 :(得分:0)

您使用不兼容和重复的工件版本。请记住,使用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。