前言
Spark Streaming本身是没有Kafka相关的jar包和API的,如果想利用Spark Streaming获取Kafka里的数据,需要自己将依赖添加SBT或Maven项目中,添加依赖更新项目之后,就可以在Eclipse等IDE里直接运行Spark Streamming+Kafka的程序了,可参考Spark Streaming连接Kafka入门教程,但是如果需要在集群通过spark-submit提交jar包的方式来运行程序的话,会抛出异常:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/kafka/common/serialization/StringDeserializer
这是因为Spark本身没有Kafka相关的jar,所以需要将与Kafka相关的jar添加Spark环境中
1、相关jar包
总共需要两个jar,可以在SBT和Maven下载的目录里找到,分别为org.apache.spark/spark-streaming-kafka-0-10_2.11/jars/spark-streaming-kafka-0-10_2.11-2.3.0.jar和org.apache.kafka/kafka-clients/jars/kafka-clients-0.10.0.1.jar,具体的名字会因你的kafka版本和spark版本而有所不同
2、方法一
第一个方法也是我觉得最简单的方法,将这两个jar拷贝到$SPARK_HOME/jars目下即可
如果用ambari安装的spark2,则对应的目录为
/usr/hdp/current/spark2-client/jars/
拷贝命令
cp spark-streaming-kafka-0-10_2.11-2.3.0.jar kafka-clients-0.10.0.1.jar /usr/hdp/current/spark2-client/jars/
然后通过如下命令提交jar即可(只是最简单的配置,实际还需要配置Executor的数量,内存大小等等)
spark-submit --master yarn --class com.dkl.leanring.spark.kafka.KafaDemo spark-scala_2.11-1.0.jar
3、方法二
通过--jars指定需要的jar,多个jar需要以逗号分隔
spark-submit --master yarn --class com.dkl.leanring.spark.kafka.KafaDemo --jars jars/kafka-clients-0.10.0.1.jar,jars/spark-streaming-kafka-0-10_2.11-2.3.0.jar spark-scala_2.11-1.0.jar
这种方式如果依赖的jar很多的话就不方便了
关于spark-submit添加依赖jar更详细说明可参考
本文来自博客园,作者:大码王,转载请注明原文链接:https://www.cnblogs.com/huanghanyu/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具