spark消费kafka问题记录(cdh5.16.2)

mac2025-03-14  15

 

版本如下

kafka和spark都安装完成后,执行spark2-shell竟然报错

Error: A JNI error has occurred, please check your installation and try again

网上搜大概是jdk版本的问题,添加环境变量可以解决

export SPARK_DIST_CLASSPATH=$(hadoop classpath)

命令行临时添加,试了试发现确实可以

 

7180改了spark配置,然后部署客户端配置,发现除了spark,别的服务都没问题

仅完成 0/3 个步骤。首个失败:主机 hadoop57 (id=5) 上的客户端配置 (id=46) 已使用 1 退出,而预期值为 0。

然后看stdout和stderr

也就是说spark没找到java,java明明配了环境变量

网上搜需要将jdk软链接到/usr/java/default(所有spark gateway节点执行)

ln -s /home/cdh/java/jdk1.8.0_221 /usr/java/default

看来spark只在固定路径去找jdk

再次部署客户端,发现没有问题

然后无需export SPARK_DIST_CLASSPATH=$(hadoop classpath)导入环境变量

发现spark2-shell也没报错

 

再说spark消费kafka的问题

我的依赖是这样的

<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.3.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-streaming-kafka-0-10 --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming-kafka-0-10_2.11</artifactId> <version>2.3.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-streaming --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming_2.11</artifactId> <version>2.3.0</version> </dependency>

bulid是这样的

<build> <sourceDirectory>src/main/java</sourceDirectory> <testSourceDirectory>src/test/java</testSourceDirectory> <plugins> <plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> <configuration> <scalaVersion>2.11.3</scalaVersion> <args> <arg>-target:jvm-1.8</arg> </args> </configuration> </plugin> </plugins> </build>

然后打包,包只有几十k,提交集群

spark2-submit --master local --class com.spark.xxx  xxx.jar

发现缺包,然后缺什么把具体包放倒../java/jdk/jre/lib/ext/下最后发现缺

org/apache/spark/internal/Logging,这个问题是之前困扰我好久好久的问题

 

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/streaming/kafka010/KafkaUtils$

 

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/internal/Logging

 

当然这样处理本身是没什么问题的,比如maven项目有的包不是通过依赖管理的,而是手动添加到libraies,打包的时候是不会打到依赖包里的,手动放过去,也可以解决,比如数据库的驱动包,fastjson等

决定修改maven依赖把所有依赖包打成一个依赖包

在plugins添加2个plugin

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.4.1</version> <configuration> <!-- get all project dependencies --> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <!-- MainClass in mainfest make a executable jar --> <archive> <manifest> <!-- 这是我的主类--> <mainClass>com.spark.Kafka_Demo</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <!-- bind to the packaging phase --> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>6</source> <target>6</target> </configuration> </plugin>

然后再次打包,会打出来2个包

 

 

一个比较大的依赖包

然后再次提交

spark2-submit --master local --class com.spark.xxx --jars xxx-jar-with-dependencies.jar xxx.jar

又报错

Exception in thread "streaming-start" java.lang.NoSuchMethodError: org.apache.kafka.clients.consumer.KafkaConsumer.subscribe(Ljava/util/Collection;)V

网上搜说添加环境变量

export SPARK_KAFKA_VERSION=0.10

临时执行了下,发现确实可以,后来在7180把spark的配置改成0.10

部署客户端配置完,再次提交没问题了

 

最新回复(0)