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

Spark on Kubernetes环境升级Spark 3.5.1自定义镜像运行PySpark任务报错求助

Spark on Kubernetes环境升级Spark 3.5.1自定义镜像运行PySpark任务报错求助

看起来你是在升级Spark版本到3.5.1后踩了老版本兼容的坑,我来帮你拆解下问题根源和解决思路:

问题根源分析

你之前为了兼容老镜像里的driver-py命令,给spark-submit做了软链接,但老版本的driver-py是个封装脚本——它会读取PYSPARK_PRIMARY环境变量来自动加载应用文件,而原生的spark-submit根本不认这个变量!

从你贴的Pod日志里的启动参数就能看出来:

driver-py --properties-file /opt/spark/conf/spark.properties --class org.apache.spark.deploy.PythonRunner

这里完全没把你的test.py路径作为参数传进去,spark-submit自然会报“缺少应用资源”的错误。

具体解决步骤

1. 废弃driver-py兼容方案,回归原生Spark-submit

先把Dockerfile里的软链接命令删掉:

# 删掉这一行:RUN ln -s /opt/spark/bin/spark-submit /usr/bin/driver-py

Spark 3.x的K8s Operator完全不需要依赖老版本的driver-py,强行模拟反而会破坏原生参数传递逻辑。

2. 修正Python版本冲突

从Pod的环境变量里看到PYSPARK_MAJOR_PYTHON_VERSION: 2,但你的镜像用的是Python3(基于apache/spark:3.5.1-java17-python3),这会导致Spark错误调用Python2,和你安装的Python3包冲突!

在Dockerfile里添加这个环境变量:

ENV PYSPARK_MAJOR_PYTHON_VERSION=3

3. 修正SparkApplication配置细节

  • 调整应用文件路径前缀:把mainApplicationFile: "file:///maprfs-csi/test.py"改成local:///maprfs-csi/test.py,K8s集群模式下local://是Spark官方推荐的容器内本地文件路径前缀,file://容易出现解析问题。
  • 显式指定启动参数(可选):如果Spark Operator还是默认调用旧命令,可以在driver配置里直接指定spark-submit和应用路径:
driver:
  cores: 1
  coreLimit: "1000m"
  memory: "8g"
  command: ["/opt/spark/bin/spark-submit"]
  args:
    - "--properties-file"
    - "/opt/spark/conf/spark.properties"
    - "--class"
    - "org.apache.spark.deploy.PythonRunner"
    - "/maprfs-csi/test.py"
  # 其他原有配置不变

这样就能直接把应用文件路径作为参数传给spark-submit,彻底绕开环境变量兼容问题。

  • 检查Operator版本兼容性:你用的是sparkoperator.k8s.io/v1beta2,要确认这个版本的Spark Operator是否支持Spark 3.5.1,老Operator可能存在版本适配问题,必要时升级到对应支持的Operator版本。

4. 镜像优化(可选但推荐)

你的镜像里重复安装了pyspark==3.5.1,但基于的apache/spark:3.5.1-java17-python3已经自带了对应版本的PySpark,重复安装可能导致版本冲突,建议把pip install里的pyspark==3.5.1删掉,减少镜像体积和潜在问题。

验证步骤

  1. 重新构建镜像,应用上述Dockerfile修改。
  2. 提交修改后的SparkApplication YAML。
  3. 启动后查看driver Pod的启动参数,确认已经包含/maprfs-csi/test.py路径。
  4. 如果还有问题,直接进入driver Pod容器,执行spark-submit /maprfs-csi/test.py,测试文件是否能正常运行,排除路径或权限问题。

按照这个思路调整,应该就能解决当前的“Missing application resource”错误了,要是还有其他细节问题,随时补充我再帮你排查!

火山引擎 最新活动