我在使用Spark流API时获得NoClassDefFoundErrorerror。这是我的流媒体代码。
我知道这是一些有问题的罐子和依赖的问题,但我无法弄清楚究竟是什么。
我正在使用kafka 0.9.0,spark 1.6.1 - 这些家属是否正常还是我需要更改它们?我在下面附上了pom.xml。
以下是我正在使用的流API。
JavaPairInputDStream directKafkaStream = KafkaUtils.createDirectStream(jsc,String.class, byte [] .class,StringDecoder.class,DefaultDecoder.class,kafkaParams,topicSet);
这是我的代码片段。我在while(itr.next())
收到错误xticklabels
java.lang.NoClassDefFoundError:org / apache / kafka / common / message / KafkaLZ4BlockOutputStream
这是我的POM.xml
directKafkaStream.foreachRDD(rdd -> {
rdd.foreachPartition(itr -> {
try {
while (itr.hasNext()) {
答案 0 :(得分:4)
KafkaLZ4BlockOutputStream位于kafka-clients jar。
直到kafka-clients版本0.8.2.2,它位于org / apache / kafka / common / message / KafkaLZ4BlockOutputStream
从0.9.0.0开始,它位于/ org / apache / kafka / common / record /
中答案 1 :(得分:1)
虽然我的kafka群集版本是0.9.0.0。 我使用像这样的maven pom用Spark Streaming处理kafka。
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.10</artifactId>
<version>1.6.0</version>
</dependency>
,但我得到的错误如上所述。 然后我尝试添加依赖,如下所示。它可以工作。
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.8.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.8.2.1</version>
</dependency>
答案 2 :(得分:0)
使用kafka jar for 0.8.2.2帮助我解决了这个问题。