【那些年我们踩过的坑】Kafka与Spark Stream 集成之作业提交报错java.lang.ClassNotFoundException

【那些年我们踩过的坑】Kafka与Spark Stream 集成之作业提交报错java.lang.ClassNotFoundException…

kafka和spark的配置和安装这里就不说明了,网上的资料有很多,英语好的可以看官方的文档。关于Kafka与Spark Stream网上也有资料,这里说明一下我用的版本为kafka_2.11-2.0.0,spark2.1,在提交程序是遇到了两个错误。
1. kafka生产者程序提交报错
提交命令如下,这里的程序jar包实现简单的日志发送功能,日志文件是搜狗开源的数据链接

java -cp /home/bd/lc/jar/KafkaSpark-2.0.jar SimpleKafkaProducer /home/bd/lc/data/SogouQ/*

提交报错如下:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/Producer
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
	at java.lang.Class.getMethod0(Class.java:3018)
	at java.lang.Class.getMethod(Class.java:1784)
	at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.apache.kafka.clients.producer.Producer
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 7 more

这里的报错是因为所提交的生产者的程序找不到相关的依赖包,程序不能运行,所以在提交程序是要指定依赖包,改为如下命令:

java -cp /home/bd/software/kafka_2.11-2.0.0/libs/*:/home/bd/lc/jar/KafkaSpark-2.0.jar SimpleKafkaProducer /home/bd/lc/data/SogouQ/*`

“/home/bd/software/kafka_2.11-2.0.0/libs/*:”这是指定的依赖的路径,一般是KAFKA_HOME的路径下的libs文件夹,不可照搬。
2. spark-stream 任务提交报错
spark程序实现日志的接受,做实时处理,提交命令如下,这里使用的是spark on yarn 运行模式,还有其他一些其他参数可以自行配置,

spark-submit  --master yarn-client --class Receiver /home/bd/lc/jar/KafkaSpark-2.0.jar 

提交报错如下,这里由于篇幅原因只截取了部分重要的报错,

18/10/19 12:47:00 ERROR TaskSetManager: Task 0 in stage 0.0 failed 4 times; aborting job
18/10/19 12:47:00 ERROR JobScheduler: Error running job streaming job 1539924420000 ms.0
org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 3, c2-psc1-VB, executor 2): java.lang.ClassNotFoundException: org.apache.spark.streaming.kafka010.KafkaRDDPartition.....
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 3, c2-psc1-VB, executor 2): java.lang.ClassNotFoundException: org.apache.spark.streaming.kafka010.KafkaRDDPartition
............

报错提示也是因为提交的spark程序没有找到所依赖的jar包spark-streaming-kafka-0-10_2.11-2.1.0.jar和kafka-clients-0.10.0.1.jar,我们把这两个jar包拷贝到所有节点的SPARK_HOME/jars/目录下,然后再提交,可是还是报相同的错误,不知道为什么(有大佬知道的可以告诉下),不过还是找到了其他的解决办法。
在spark的安装配置时,我们在SPARK_HOME/conf/spark-defaults.conf文件中配置了如下的参数,spark on yarn模式,默认情况下会读取spark本地的jar包(再jars目录下)分配到yarn的containers中,但是我只之前的拷贝为甚么还是报错(迷茫脸…),配置好spark.yarn.jars参数后,可以将spark所需的jar包放在对应的hdfs路径上。

spark.yarn.jars=hdfs://c1-psc1-VB:9000/user/bd/spark/sparkjar/*`

至此,两个报错解决,只是我之前将两个jar包拷贝到SPARK_HOME/jars/下怎么不可以。。。。。。。。

猜你喜欢

转载自blog.csdn.net/baidu_27485577/article/details/83181110