KafkaUtils classe ne trouve pas dans Spark streaming
J'ai juste commencé avec Spark Streaming et je suis en train de construire un exemple d'application qui compte les mots à partir d'un Kafka de flux. Bien qu'il compile avec sbt package
, quand je le lance, j'obtiens NoClassDefFoundError
. Cette post semble avoir le même problème, mais la solution est pour le Maven et je n'ai pas été en mesure de le reproduire avec sbt.
KafkaApp.scala
:
import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.streaming.kafka._
object KafkaApp {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("kafkaApp").setMaster("local[*]")
val ssc = new StreamingContext(conf, Seconds(1))
val kafkaParams = Map(
"zookeeper.connect" -> "localhost:2181",
"zookeeper.connection.timeout.ms" -> "10000",
"group.id" -> "sparkGroup"
)
val topics = Map(
"test" -> 1
)
//stream of (topic, ImpressionLog)
val messages = KafkaUtils.createStream(ssc, kafkaParams, topics, storage.StorageLevel.MEMORY_AND_DISK)
println(s"Number of words: %{messages.count()}")
}
}
build.sbt
:
name := "Simple Project"
version := "1.1"
scalaVersion := "2.10.4"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.1.1",
"org.apache.spark" %% "spark-streaming" % "1.1.1",
"org.apache.spark" %% "spark-streaming-kafka" % "1.1.1"
)
resolvers += "Akka Repository" at "http://repo.akka.io/releases/"
Et je la soumets avec:
bin/spark-submit \
--class "KafkaApp" \
--master local[4] \
target/scala-2.10/simple-project_2.10-1.1.jar
Erreur:
14/12/30 19:44:57 INFO AkkaUtils: Connecting to HeartbeatReceiver: akka.tcp://[email protected]:65077/user/HeartbeatReceiver
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/streaming/kafka/KafkaUtils$
at KafkaApp$.main(KafkaApp.scala:28)
at KafkaApp.main(KafkaApp.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:329)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.streaming.kafka.KafkaUtils$
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
OriginalL'auteur kahlo | 2014-12-30
Vous devez vous connecter pour publier un commentaire.
étincelle soumettre n'est pas automatiquement mis le paquet contenant KafkaUtils. Vous devez avoir dans votre projet BOCAL. Pour cela, vous devez créer un all inclusive uber-pot, à l'aide de sbt assemblée. Voici un exemple de construire.sbt .
https://github.com/tdas/spark-streaming-external-projects/blob/master/kafka/build.sbt
Vous avez évidemment besoin d'ajouter de l'assemblée plugin pour le SBT.
https://github.com/tdas/spark-streaming-external-projects/tree/master/kafka/project
avec le changement, si je lance stb paquet, je suis d'erreur. : erreur: pas trouvé: objet AssemblyKeys importation AssemblyKeys._ ^ [erreur] Type d'erreur dans l'expression
Il suffit de retirer la première ligne d'importation et de la "assemblySettings" de ligne, qui fonctionne pour moi.
OriginalL'auteur Tathagata Das
S'il vous plaît essayer en incluant l'ensemble de la dépendance des pots pendant l'envoi de la demande:
OriginalL'auteur Sandeep
Suivantes
build.sbt
a fonctionné pour moi. Il vous demande aussi de mettre lasbt-assembly
plugin dans un fichier sous laprojects/
répertoire.construire.sbt
projet/plugins.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.1")
OriginalL'auteur Vibhuti
rencontrer le même problème, je l'ai résolu en construire le pot avec dépendances.
ajoutez le code ci-dessous pour pom.xml
mvn package
soumettre l' "example-jar-with-dependencies.jar"
OriginalL'auteur Nilesh
Ajouté la Dépendance de l'extérieur, le projet-->propriétés - > java Build Path-->Bibliothèques--> add External jars et ajouter le jar requis.
cela a résolu mon problème.
OriginalL'auteur Suresh
À l'aide de l'Étincelle de 1,6 faire le travail pour moi, sans les tracas de gérer de nombreux external jars... Peut-être assez compliquer à gérer...
OriginalL'auteur Gi1ber7
Vous pouvez également télécharger le fichier jar et le mettre dans l'Étincelle dossier lib, car il n'est pas installé avec Spark, au lieu de battre votre tête à essayer de pari SBT construire.sbt au travail.
http://central.maven.org/maven2/org/apache/spark/spark-streaming-kafka-0-10_2.10/2.1.1/spark-streaming-kafka-0-10_2.10-2.1.1.jar
copie à:
/usr/local/spark/spark-2.1.0-bin-hadoop2.6/jars/
OriginalL'auteur Walker Rowe
utiliser le dessous dans la construction.sbt
Cela permettra de résoudre le problème
OriginalL'auteur Sandeep Sompalle