2016-04-14 1 views
2

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:
+0

Avez-vous veillé à inclure 'spark-streaming_kafka' dans votre JAR uber? –

+0

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

Répondre

0

Il s'avère que l'étincelle 1.6 nécessite kafka 0.8.2 et que j'ai installé 0.8.1. Après la mise à niveau tout a fonctionné comme un charme :)