You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s SparkOperator运行Spark作业访问Minio s3a端点Executor丢失jar包报错

问题根因

你在deps.jars中配置的远程Maven依赖,仅被Spark Driver节点下载到了本地临时目录,Executor启动时无法正常拉取这些依赖包,所以触发了找不到jar文件的错误。另外你当前配置的s3a端点为127.0.0.1:9000,在K8S集群中该地址指向Pod自身,无法访问到外部的Minio服务,后续依赖问题解决后也需要修改该配置。

解决方案(推荐优先使用第一种)

方案1:将依赖包内置到Spark镜像中(稳定性最高)

修改你的Dockerfile,提前将S3A相关依赖下载到Spark的默认类路径目录下,修改后的内容如下:

FROM spark-base/spark-py:1.0.0

USER root:root

# 下载s3a所需依赖到Spark默认jars目录
RUN cd /opt/spark/jars && \
    curl -O https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.2.0/hadoop-aws-3.2.0.jar && \
    curl -O https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.11.375/aws-java-sdk-bundle-1.11.375.jar && \
    chmod 644 hadoop-aws-3.2.0.jar aws-java-sdk-bundle-1.11.375.jar

WORKDIR /app

COPY requirements.txt . 

RUN pip install -r requirements.txt

COPY main.py .

USER 1001

重新构建镜像后,修改SparkApplication配置:

  1. 删除spec.deps.jars的相关配置,依赖已经内置到镜像中无需额外配置
  2. 修改spec.hadoopConf中的fs.s3a.endpoint为K8S集群可访问的Minio服务地址,同时补全Minio认证配置:
hadoopConf:
  "fs.s3a.endpoint": "http://<你的Minio服务IP或域名>:<端口>"
  "fs.s3a.access.key": "<Minio AccessKey>"
  "fs.s3a.secret.key": "<Minio SecretKey>"
  "fs.s3a.path.style.access": "true"
  "fs.s3a.connection.ssl.enabled": "false" # 若Minio未开启HTTPS需要配置该参数

方案2:不修改镜像,调整SparkApplication配置

如果不想重新构建镜像,可以添加Spark配置让Executor启动前自动下载远程依赖:
在SparkApplication的spec下新增sparkConf配置,同时保留原有deps.jars配置:

spec:
  # 原有其他配置保持不变
  sparkConf:
    "spark.kubernetes.executor.initContainers.downloadRemoteJars.enabled": "true"
    "spark.driver.extraClassPath": "/tmp/spark-jars/*"
    "spark.executor.extraClassPath": "/tmp/spark-jars/*"

同样需要按照方案1的说明修正hadoopConf中的Minio访问地址和认证配置。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:54:03