2017-06-15 119 views
0

我导出了两个应用程序的两个jar,我在同一个Kafka/Spark Streaming项目中。 与卡夫卡生产者的罐子工作正常。使用Spark消费者罐子返回此错误:NoClassDefFoundError:导出jar后的kafka/serializer/StringDecoder

NoClassDefFoundError: kafka/serializer/StringDecoder

它们共享相同的依赖文件夹,我已经很明显出口,以使罐子的Eclipse以外的地方工作。

在Eclipse中,它们都正常工作。

我该如何解决这个问题?

+0

你是否在你的课堂路径中使用kafka jar? – Gaurav

+0

我在classpath中有spark-streaming-kafka。这不够吗? – sirdan

+0

但stringDecoder是kafka模块的一部分,只是检查kafka-streaming是否包含String解码器 – Gaurav

回答

1

你需要Kafka本身的类路径,而不仅仅是spark-streaming-kafka。在Eclipse中,因为您的构建系统检索所有依赖关系,并且Eclipse集成了它。

I looked into the jar of spark-streaming-kafka and it contains the .class file that is named in the error: org.apache.spark.streaming.kafka.KafkaUtils$.createStream(Ka‌​fkaUtils.scala:55). So I can't understand why he misses this class.

想必你的意思是包含org.apache.spark.streaming.kafka.KafkaUtils$,但是当JVM尝试加载它,它发现它需要其他类,包括kafka.serializer.StringDecoder,这是不存在的。

+0

感谢您的帮助。那么,你认为我需要导入哪个罐子来解决这个问题?因为我一直遇到Spark和Kafka版本不兼容的问题。 – sirdan

+0

你真的没有提供足够的信息来回答这个问题。但请参阅https://stackoverflow.com/questions/275120/java-how-do-i-know-which-jar-file-to-use-given-a-class-name。 –

+0

解决。我错过了所有只用Maven依赖项导入的Kafka jar,所以Eclipse无法实际导出它们。 你的提示解决了这个问题,所以非常感谢你,当之无愧的赏金。 – sirdan

相关问题