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

Spark中指定Executor数量:SparkSession与spark-submit的最佳实践

Spark Executor数量配置:spark-submit vs SparkSession的差异与最佳实践

二者的核心差异

  • 优先级不同:spark-submit传入的配置参数优先级高于SparkSession.builder中设置的参数。比如你同时在spark-submit用--num-executors 5,代码里设置spark.executor.instances=3,最终生效的是5个Executor。
  • 灵活性不同:spark-submit的配置是提交时动态指定,不需要修改代码就能适配不同场景——比如测试环境用2个Executor,生产环境用10个,直接改提交命令就行;如果把Executor数量写死在代码里,换环境就得修改代码、重新打包,效率极低。
  • 环境耦合度不同:代码里硬写master和spark.executor.instances会让代码和特定集群绑定,后续切换集群模式(比如从Standalone转YARN)或者换集群地址,都得改代码;用spark-submit指定master和资源配置,代码可以保持通用,适配多种集群环境。
  • 可见性不同:提交命令里的资源配置一目了然,运维排查问题时能快速知道作业的资源需求;代码里的配置需要查看源码才能发现,不直观,不利于团队协作。

最佳实践

  1. 资源类配置(Executor数量、内存、核数)优先用spark-submit指定:比如用--num-executors参数设置Executor数量,这样既能灵活调整,又能避免代码和环境绑定。
  2. 代码中只保留通用配置:比如spark.eventLog.enabled这类不随环境变化的配置,可以放在SparkSession里;但master和资源相关配置尽量从提交命令传入,让代码更通用。

修改后的代码示例:

spark = SparkSession.builder \
        .appName("Spark-job-on-cluster-example") \
        .config("spark.eventLog.enabled", True) \
        .getOrCreate()

对应的提交命令:

$ spark-submit --master spark://spark-master:7077 --num-executors 3 --py-files my_libs.zip my_spark-main.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 23:07:10