2017-03-26 4 views
0

Ich bin in einem NoSuchMethodError, wenn ich versuche, Kafka-Integration für Structured Streaming zu verwenden. Der Stack-Trace sieht wie folgt aus, wenn der erste Datensatz zur Verfügung: Verursacht durch: java.lang.NoSuchMethodError:Spark Kafka 0.10 NoSuchMethodError org.apache.kafka.clients.consumer.KafkaConsumer.assign

org.apache.kafka.clients.consumer.KafkaConsumer.assign(Ljava/util/Collection;)V 
     at org.apache.spark.sql.kafka010.CachedKafkaConsumer.createConsumer(CachedKafkaConsumer.scala:56) 
     at org.apache.spark.sql.kafka010.CachedKafkaConsumer.<init>(CachedKafkaConsumer.scala:45) 
     at org.apache.spark.sql.kafka010.CachedKafkaConsumer$.getOrCreate(CachedKafkaConsumer.scala:349) 
     at org.apache.spark.sql.kafka010.KafkaSourceRDD$$anon$1.<init>(KafkaSourceRDD.scala:137) 
     at org.apache.spark.sql.kafka010.KafkaSourceRDD.compute(KafkaSourceRDD.scala:136) 
     at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323) 
... 

Mein sbt diese Abhängigkeiten hat:

libraryDependencies ++= Seq(
    scalaTest % Test, 
    "org.apache.spark" %% "spark-core" % "2.1.0" % "provided", 
    "org.apache.spark" %% "spark-sql" % "2.1.0" % "provided", 
    "org.apache.spark" %% "spark-sql-kafka-0-10" % "2.1.0" % "provided", 
    "org.apache.hadoop" % "hadoop-client" % "2.6.0" % "provided" 
) 

und Scala Version ist 2.11 .8.

Ich bin in der Lage, Spark-Anwendungen für Dataframe auszuführen. Es ist nur die Kafka-Integration, die mir diesen Fehler gibt. Der strukturierte Streaming-Code ist nur das Beispiel von Dokumentation here:

val ds1 = spark 
    .readStream 
    .format("kafka") 
    .option("kafka.bootstrap.servers", "data01:9092,data02:9092,data03:9092") 
    .option("subscribe", "cluster-topic-01") 
    .load() 
    val ds2 = ds1.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)") 
    val query = ds2.writeStream 
     .format("console") 
     .start() 
    query.awaitTermination() 

Jede Beratung, wo ich das Problem suchen? TIA

Antwort

2

Meine Vermutung ist, dass Sie einen Streuner Kafka-Client irgendwo in der Runtime Classpath, die geladen wird anstelle der einen spark-sql-kafka-0-10 hat eine Abhängigkeit auf.

+0

Danke für den Tipp. –

+0

Ich habe vergessen zu erwähnen, dass der Fehler von einem Cloudera Garn Cluster ist und ein Flume wie folgt installiert ist: /usr/lib/flume-ng/lib/kafka-clients-0.9.0-kafka-2.0.2. jar /usr/lib/flume-ng/lib/kafka_2.10-0.9.0-kafka-2.0.2.jar Funken 2.1.0 diese Zeile in conf hat/spark-env.sh SPARK_DIST_CLASSPATH = "$ SPARK_DIST_CLASSPATH:/usr/lib/flume-ng/lib/* " was die Ursache ist. Ich habe eine Hadoop-Client-Maschine, die Flume nicht installiert hat und es funktioniert einwandfrei. Kommentieren Sie jetzt die Zeile in spark-env.sh, lassen Sie mich auch meine strukturierten Streaming auf Garn laufen. –

+1

Yup, es ist immer so etwas mit diesen 'Fehler' in Spark wie 'NoSuchMethodError' und' NoClassDefFoundError'. Schön, dass Sie das Problem gefunden haben. Viel Glück bei Ihrem Projekt! Ein upvote würde geschätzt werden. – Vidya

Verwandte Themen