在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
相关产品推荐
相关产品推荐

