2017-06-15 42 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

相關問題