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

Spark2.3.0应用提交K8s(Minikube)容器启动报错:driver可执行文件未找到

解决Spark on Kubernetes中"exec: "driver": executable file not found in $PATH"错误

这个错误是集群模式下Spark驱动容器启动失败的典型问题,根源在于你指定的自定义镜像docker.io/anantpukale/spark_app:1.3没有正确配置Spark在Kubernetes环境下的启动入口——K8s尝试执行名为driver的可执行文件,但它不在容器的$PATH里,也没有正确存在于镜像中。下面是几种针对性的解决方法:

方法1:基于官方Spark镜像构建应用镜像(推荐)

官方Spark镜像已经预先配置好了K8s所需的driver和executor启动脚本,以及正确的环境变量,是最省心的方案:

  1. 编写如下Dockerfile:

    # 使用与你的Spark版本完全匹配的官方镜像(这里是2.3.0)
    FROM spark:2.3.0
    # 将你的应用jar包复制到镜像内的指定目录,比如/app
    COPY CashFlow-spark2.3.0-shaded.jar /app/
    
  2. 构建镜像并确保Minikube能访问到它:

    • 如果是本地测试,先执行eval $(minikube docker-env),让Docker直接把镜像构建到Minikube的本地Docker环境中,无需推送到远程仓库:
      eval $(minikube docker-env)
      docker build -t anantpukale/spark_app:1.4 .  # 这里版本号可以更新一下
      
  3. 修改你的spark-submit命令,确保local://路径指向镜像内的jar包绝对路径:

    /opt/spark/bin/spark-submit \
      --master k8s://https://192.168.99.101:8443 \
      --name cfe2 \
      --deploy-mode cluster \
      --class com.yyy.Application \
      --conf spark.executor.instances=1 \
      --conf spark.kubernetes.container.image=docker.io/anantpukale/spark_app:1.4 \
      local:///app/CashFlow-spark2.3.0-shaded.jar
    

方法2:手动配置自定义基础镜像

如果你必须使用自己的基础镜像(比如基于OpenJDK),需要手动安装Spark并配置环境变量:

  1. 编写Dockerfile,确保Spark的bin目录加入$PATH:

    # Spark 2.3.0需要Java 8环境,所以选择对应版本的JRE镜像
    FROM openjdk:8-jre
    # 下载并解压Spark 2.3.0(注意匹配Hadoop版本,这里用hadoop2.7)
    RUN wget https://archive.apache.org/dist/spark/spark-2.3.0/spark-2.3.0-bin-hadoop2.7.tgz && \
        tar -xzf spark-2.3.0-bin-hadoop2.7.tgz && \
        mv spark-2.3.0-bin-hadoop2.7 /opt/spark && \
        rm spark-2.3.0-bin-hadoop2.7.tgz
    # 将Spark的bin目录加入环境变量PATH
    ENV PATH="/opt/spark/bin:${PATH}"
    # 复制你的应用jar包
    COPY CashFlow-spark2.3.0-shaded.jar /app/
    
  2. 同样按照方法1的步骤构建镜像、更新spark-submit命令即可。

关键注意点

  • 集群模式下,local://指向的是驱动容器内部的路径,必须是jar包在镜像中的绝对路径(三个斜杠:local:///app/xxx.jar),否则会找不到jar包。
  • 确保Minikube能拉取到你的镜像:本地构建时一定要先执行eval $(minikube docker-env),否则Minikube会去远程仓库拉取,导致镜像不存在的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:40:31