java.lang.NoClassDefFoundError:org / apache / kafka / common / message / KafkaLZ4BlockOutputStream

时间:2016-10-07 15:49:39

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

我在使用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()) {

3 个答案:

答案 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帮助我解决了这个问题。