2017-03-26 7 views
0

構造化ストリーミング用のKafka統合を使用しようとすると、NoSuchMethodErrorが発生します。 によって引き起こさ:java.lang.NoSuchMethodErrorの:Spark Kafka 0.10 NoSuchMethodError org.apache.kafka.clients.consumer.KafkaConsumer.assign

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" 
) 

とScalaのバージョンは2.11です:

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) 
... 

私のSBTは、これらの依存関係を持って利用できる非常に最初のレコードがある場合にスタックトレースは次のようになります.8。

私はデータフレーム用のスパークアプリケーションを実行できます。私にこのエラーを与えるのはカフカの統合だけです。構造化されたストリーミングコードドキュメンテーション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() 

? TIA

答えて

2

私の推測では、実行中のクラスパスのどこかに迷子のカフカクライアントがあり、その代わりにロードされているのはspark-sql-kafka-0-10です。

+0

チップをありがとう。 –

+0

エラーはCloudera糸クラスターからのものであり、Flumeは以下の通りインストールされています: /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 spark 2.1.0はconf/spark-env.shにこの行があります SPARK_DIST_CLASSPATH = "$ SPARK_DIST_CLASSPATH:/ usr/lib/flume-ng/lib/* " これは根本原因です。 FlumeがインストールされていないHadoopクライアントマシンがあり、問題なく動作します。今、spark-env.shの行をコメントアウトして、構造化されたストリーミングを糸にも実行させます。 –

+1

うわー、 'NoSuchMethodError'や' NoClassDefFoundError'のように、Sparkの 'Error'sには常にそういうものがあります。あなたが問題を発見してうれしい。あなたのプロジェクトに幸運を! upvoteは評価されるだろう。 – Vidya

関連する問題