je vais avoir des problèmes étincelle en cours d'exécution en continu avec kafka sur mon groupe CDH 5 avec la commande suivante:étincelle: ClassNotFoundException lors de l'exécution KafkaWordCount exemple
spark-submit --master yarn --deploy-mode client
--class org.apache.spark.examples.streaming.KafkaWordCount
/usr/lib/spark/examples/lib/spark-examples-1.6.0-cdh5.7.0-hadoop2.6.0-cdh5.7.0.jar
zk1,zk2,zk3 group topic 1
S'il vous plaît noter que le travail réel doit fonctionner en mode client donc le paramètre de mode de déploiement. Exécuter les résultats de la commande ci-dessus dans l'exception suivante (côté conducteur):
Exception in thread "main" java.lang.NoClassDefFoundError: kafka/serializer/StringDecoder
at org.apache.spark.streaming.kafka.KafkaUtils$.createStream(KafkaUtils.scala:66)
at org.apache.spark.examples.streaming.KafkaWordCount$.main(KafkaWordCount.scala:57)
at org.apache.spark.examples.streaming.KafkaWordCount.main(KafkaWordCount.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$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: kafka.serializer.StringDecoder
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 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 12 more
kafka.serializer.StringDecoder est naturellement présent dans le pot bougies d'exemples. Le fait de placer le jar sur hadoop classpath résout le problème, mais je cherche une meilleure solution (plus facile à maintenir) ou au moins une explication sur la raison pour laquelle un job ne peut pas trouver les classes contenues dans le même jar :)
Des idées? Merci!
Quelques informations supplémentaires:
- D'autres exemples d'allumage fonctionnent très bien (. Par exemple SparkPi)
- la version Hadoop est 2.6.0-cdh5.7.0
- version Spark est 1.6.0
- chemin de classe de fils:
Avez-vous veillé à inclure 'spark-streaming_kafka' dans votre JAR uber? –
Oui, il est inclus dans le pot uber. Notez que le pot a été inclus dans la distribution d'étincelles et n'a pas été fait par moi. Le mettre aussi sur le classpath fonctionne donc il doit contenir tous les deps. J'ai essayé de créer des bocaux avec d'autres systèmes externes, tels que spray-json, et ils fonctionnent bien. –