私はkafkaからデータを読み込むスパークストリーミングアプリケーションを作成しました。 spark1.6.0
とkafka0.8.2.2
でjarをビルドしました。スパークストリーミング:java.lang.NoClassDefFoundError:kafka/api/TopicMetadataRequest
KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicSet)
私は糸クライアントモードでアプリケーションを実行し、それが正常に動作しますが、私は、糸クラスタモードで実行すると、それは次の例外で失敗します:
私はカフカダイレクト・ストリームAPIを使用していますUser class threw exception: java.lang.NoClassDefFoundError: kafka/api/TopicMetadataRequest.
私はアプリケーションjarにパッケージ化されたkafkaクラスを持っており、実行時にもkafka/api/TopicMetadataRequestがアプリケーションjarからロードされます。
コンパイルと実行時のバージョンが一致しない場合、NoClassDefFoundError
が発生します。
----------- EDIT ------------
マイ.sbtがfolllowngたブロック:
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.6.0" % "provided",
"org.apache.spark" %% "spark-sql" % "1.6.0" % "provided",
"org.apache.spark" %% "spark-streaming" % "1.6.0" % "provided",
"org.apache.spark" %% "spark-mllib" % "1.6.0" % "provided",
"org.apache.spark" % "spark-streaming-kafka_2.10" % "1.6.0",
"org.apache.kafka" % "kafka_2.10" % "0.8.2.2",
"org.springframework.security" % "spring-security-web" % "3.0.7.RELEASE",
"org.scalatest" % "scalatest_2.10" % "3.0.0-M12" % "test",
"junit" % "junit" % "4.11",
"com.typesafe.play" % "play_2.10" % "2.4.0-M2",
"org.apache.httpcomponents" % "httpclient" % "4.2.5")
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.first } }
任意の提案これを解決する方法、またはこの例外が発生する理由は何ですか?
あなたのjarファイルをクラスタに送信するための 'SPARK.JARS'設定が欠落しているようです。 – maasg
として、アプリケーションjarのオプションを与える必要はありません。右 ? '$ ./bin/spark-submit --class path.to.your.Class - マスター糸--deploy-mode cluster [options] [app options]' –
Alok
どうしましたか? jark with spark1.6.0とkafka0.8.2.2 "_「spark-streaming-kafka」Sparkモジュールの依存関係をどう定義しましたか? –