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工具就能确认任务状态:
- 查看Pod状态:
kubectl get pods,会看到驱动Pod和executor Pod被创建,等待它们进入Running状态 - 查看驱动Pod日志:
kubectl logs <sparkapp-driver-pod-name>,如果能看到打印的RDD元素列表,就说明Spark在K8s上的基础运行完全正常
内容的提问来源于stack exchange,提问作者Azura
相关产品推荐
相关产品推荐

