2016-04-14 3 views
2

У меня возникли проблемы с запуском искры потоковой с Кафка на моем CDH 5 кластера с помощью следующей команды:искра: ClassNotFoundException при работе примера KafkaWordCount

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 

Пожалуйста, обратите внимание, что реальная работа должна выполняться в режиме клиента, следовательно, настройки режима развертывания. Выполнение вышеуказанных результатов команды в следующих исключениях (стороны водителя):

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, конечно, присутствующих в баночке искровых примеров. Кроме того, размещение jar на пути класса hasoop решает проблему, но я ищу лучшие (более простые в обслуживании) решения или, по крайней мере, некоторые объяснения относительно того, почему работа не может найти классы, которые содержатся в одной и той же банке :)

Любые идеи? Благодаря!

Некоторая дополнительная информация:

  • Другие примеры свечей работать нормально (. Например SparkPi)
  • Hadoop версия 2.6.0-cdh5.7.0
  • Спарк версия 1.6.0
  • пряжа classpath: /etc/hadoop/conf:/etc/hadoop/conf:/etc/hadoop/conf:/usr/lib/hadoop/lib/*:/usr/lib/hadoop/.//*:/usr/lib/hadoop-hdfs/./:/usr/lib/hadoop-hdfs/lib/*:/usr/lib/hadoop-hdfs/.//*:/usr/lib/hadoop-yarn/lib/*:/usr/lib/hadoop-yarn/.//*:/usr/lib/hadoop-mapreduce/lib/*:/usr/lib/hadoop-mapreduce/.//*:/usr/lib/hadoop-yarn/.//*:/usr/lib/hadoop-yarn/lib/*
+0

Вы включили 'spark-streaming_kafka' в свой uber JAR? –

+0

Да, он включен в uber jar. Обратите внимание, что банка была включена в распределение искры и не была сделана мной. Кроме того, установка его на classpath работает, поэтому он должен содержать все депо. Я пробовал создавать банки с другими внешними дисками, такими как спрей-джсон, и они отлично работают. –

ответ

0

Оказывается, для искры 1.6 требуется kafka 0.8.2, и у меня установлен 0.8.1. После его обновления все работало как шарм :)

Смежные вопросы