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

在Kubernetes单Spark作业中能否多次启停Spark Session?

问题:Spark on Kubernetes 中能否多次启停Spark Session?

当使用以下spark-submit命令向Kubernetes集群提交Spark作业时:

bin/spark-submit \
    --master k8s://https://<k8s-apiserver-host>:<k8s-apiserver-port> \
    --deploy-mode cluster \
    --name spark-pi \
    --class org.apache.spark.examples.SparkPi \
    --conf spark.executor.instances=5 \
    --conf spark.kubernetes.container.image=<spark-image> \
    local:///path/to/examples.jar

能否在作业的Python代码中多次启动和停止Spark Session?示例代码如下:

# start spark session
session = SparkSession \
        .builder \
        .appName(appname) \
        .getOrCreate()

## Doing some operations using spark 
session.stop()

## some python code.

# start spark session
session = SparkSession \
        .builder \
        .appName(appname) \
        .getOrCreate()

## Doing some operations using spark 
session.stop()

回答:

这种操作是可行的,但需要注意以下几点:

  • 每次调用getOrCreate()时,若当前无活跃SparkSession,会重新创建新实例;若之前的Session已通过stop()销毁,同样会生成新的Session。
  • 多次启停会带来额外资源开销:每次创建新Session都要重新初始化Spark上下文,在Kubernetes环境中,之前的Executor Pod会随Session停止被销毁,新Session创建时需重新申请Executor资源,这会增加作业的运行时长与资源消耗。
  • 需保证Session配置一致性:如果后续创建Session时修改了Builder的配置参数,新Session会采用新配置;若配置与之前一致,getOrCreate()在Session销毁后仍会创建新实例。
  • 在Kubernetes集群模式下,Driver进程运行在K8s Pod内,多次启停Session不会触发Driver Pod重启,但每个Session对应的Executor Pod会在Session停止时销毁,重新创建Session时会拉起新的Executor Pod。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:15:32