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

Spark on Kubernetes执行异常:Driver Pod启动失败求助

Spark 2.3 原生Kubernetes部署验证实践

我最近刚用Spark 2.3自带的Kubernetes原生部署特性,在已运行的K8s集群上跑了个极简验证任务——这个任务完全不涉及数据读写,只是从列表创建RDD并打印结果,专门用来确认Spark在K8s上的基础运行能力。

前置准备

我提前把Spark应用的Jar包打包进了自定义的Kubernetes容器镜像里,这样提交任务时不用额外传Jar包,直接引用镜像内的文件路径就行,省了不少网络传输的麻烦。

提交命令

我用的spark-submit命令如下(补充了原命令里省略的关键参数):

bin/spark-submit \
  --master k8s://https://k8-master \
  --deploy-mode cluster \
  --name sparkapp \
  --image my-custom-spark-image:v1 \
  --class com.example.MySimpleSparkApp \
  local:///opt/spark/jars/my-app.jar

参数关键点说明

  • --master k8s://https://k8-master:指定K8s集群API Server的地址,格式必须是k8s://前缀加API Server的HTTPS地址,确保Spark能正确连接到K8s集群
  • --deploy-mode cluster:采用集群模式提交,驱动程序会运行在K8s的Pod中,而非本地机器,这也是生产环境常用的部署模式
  • --image:指定包含Spark运行环境和应用Jar包的自定义镜像,我把Jar包放在了镜像内的/opt/spark/jars/目录下
  • local:///opt/spark/jars/my-app.jar:用local://前缀告诉Spark从容器本地读取Jar包,对应镜像内的实际路径

验证代码示例

我用的验证代码非常轻量化,核心就是确保Spark上下文能正常初始化、RDD能正常执行:

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext

object MySimpleSparkApp {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("SimpleRDDValidation")
    val sc = new SparkContext(conf)
    
    // 从本地列表创建测试RDD
    val testData = List(10, 20, 30, 40, 50)
    val rdd = sc.parallelize(testData)
    
    // 打印RDD元素,验证执行结果
    println("=== RDD Elements ===")
    rdd.collect().foreach(println)
    
    sc.stop()
  }
}

验证步骤

提交命令后,用K8s工具就能确认任务状态:

  1. 查看Pod状态:kubectl get pods,会看到驱动Pod和executor Pod被创建,等待它们进入Running状态
  2. 查看驱动Pod日志:kubectl logs <sparkapp-driver-pod-name>,如果能看到打印的RDD元素列表,就说明Spark在K8s上的基础运行完全正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:52:28