Spark无法加载Kafka相关Jar包及Scala类缺失问题求助
问题解决步骤
1. 修正路径拼写错误
从错误信息可以看到,系统实际路径是/home/tuanle/apachearea/...,但代码中spark_jar变量写的是areaapache,这是拼写错误。修改为正确的路径:
spark_jar = "/home/tuanle/apachearea/software/spark-3.5.2-bin-hadoop3/jars"
去掉file:///前缀,本地文件路径无需该标识。
2. 移除不必要的Jar包
- spark-streaming-kafka-0-10_2.13-3.5.2.jar:你使用的是结构化流(Structured Streaming),依赖的是
spark-sql-kafka-0-10,而非传统DStream API的Kafka连接器,保留该Jar会导致冲突。 - jsr305-3.0.0.jar:该Jar已包含在Spark默认依赖中,无需重复指定。
3. 匹配Kafka客户端版本
Spark 3.5.2的spark-sql-kafka-0-10是基于kafka-clients 3.4.0编译的,你使用的3.8.0版本存在兼容性问题。将kafka-clients-3.8.0.jar替换为kafka-clients-3.4.0.jar并放入Spark的jars目录。
4. 简化Spark Jars配置
更新SparkSession构建器中的spark.jars配置,只保留必要的Jar包:
.config("spark.jars", f"{spark_jar}/spark-cassandra-connector_2.13-3.5.1.jar,{spark_jar}/spark-sql-kafka-0-10_2.13-3.5.2.jar,{spark_jar}/kafka-clients-3.4.0.jar,/usr/share/java/mysql-connector-java.jar")
5. 验证Jar包存在性
逐一检查以下Jar包是否存在于指定目录:
spark-cassandra-connector_2.13-3.5.1.jar(Spark jars目录)spark-sql-kafka-0-10_2.13-3.5.2.jar(Spark jars目录)kafka-clients-3.4.0.jar(Spark jars目录)mysql-connector-java.jar(/usr/share/java/目录)
6. 备选方案:使用spark-submit提交脚本
如果上述配置仍有问题,直接通过spark-submit命令指定Jar包,避免代码中路径配置的问题:
spark-submit --jars /home/tuanle/apachearea/software/spark-3.5.2-bin-hadoop3/jars/spark-cassandra-connector_2.13-3.5.1.jar,/home/tuanle/apachearea/software/spark-3.5.2-bin-hadoop3/jars/spark-sql-kafka-0-10_2.13-3.5.2.jar,/home/tuanle/apachearea/software/spark-3.5.2-bin-hadoop3/jars/kafka-clients-3.4.0.jar,/usr/share/java/mysql-connector-java.jar your_script.py
问题根源说明
- 路径拼写错误导致Spark无法找到指定Jar包;
- 不必要的Jar包引发API冲突;
- Kafka客户端版本不兼容导致类加载失败;
scala/$less$colon$less错误是Jar包版本不匹配和路径问题共同作用的结果,修复上述配置后即可解决。
内容的提问来源于stack exchange,提问作者Lê Anh Tuấn 291N40
相关产品推荐
相关产品推荐

