You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

K8s容器中Spark 2.4.4集成Kafka Streaming遇依赖问题求助

解决Spark 2.4.4连接Kafka时的依赖缺失问题

Hey Sridhar, let's break down how to fix this dependency issue you're facing with Spark Streaming and Kafka in your K8s environment:

首先,澄清一个关键误解

你在Maven上看到的2.10/2.11不是Spark版本,而是Scala版本!Spark的构件命名规则是artifactId_scalaVersion:sparkVersion,比如spark-streaming-kafka-0-8_2.12:2.4.4里:

  • _2.12是Scala的版本(Spark 2.4.4默认配套的Scala版本就是2.12,从你提到的spark-streaming_2.12-2.4.4.jar也能验证这一点)
  • 2.4.4是Spark版本

你之前搜索时没指定Scala版本后缀,所以才没找到对应Spark 2.4.4的包。


具体解决方法

方法1:使用--packages自动拉取依赖(推荐)

直接在spark-submit命令中添加完整的依赖坐标,Spark会自动从Maven仓库下载并分发到集群节点:

bin/spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8_2.12:2.4.4 your_spark_script.py

这个命令会自动处理所有依赖项,不需要手动下载jar包,非常适合K8s集群环境。

方法2:手动下载Assembly Jar并指定

如果你的环境无法访问Maven仓库,可以手动下载包含所有依赖的Assembly Jar:

  1. 找到对应Scala版本(2.12)和Spark版本(2.4.4)的spark-streaming-kafka-0-8-assembly_2.12-2.4.4.jar
  2. 将jar包放到所有Spark节点能访问的路径(比如共享存储,或者每个节点的本地路径)
  3. --jars参数指定该jar:
bin/spark-submit --jars /path/to/spark-streaming-kafka-0-8-assembly_2.12-2.4.4.jar your_spark_script.py

额外注意事项

  • 确保你使用的Kafka Utils API和依赖包版本匹配:你的代码用的是KafkaUtils.createDirectStream,这属于Spark Streaming对Kafka 0.8.x版本的适配API,所以必须用spark-streaming-kafka-0-8系列的包,不能用针对Kafka 0.10+的spark-streaming-kafka-0-10包(后者API不同)。
  • 在K8s集群模式下运行时,如果用--packages,Spark会自动将依赖上传到集群的分布式存储(比如K8s的PVC),不需要手动同步到每个节点,这是最省心的方式。
  • 可以通过运行spark-submit --version确认你的Spark配套的Scala版本,确保依赖包的Scala后缀和它一致。

内容的提问来源于stack exchange,提问作者sridhar

火山引擎 最新活动