Spark默认配置查询疑问:为何无法获取executor相关配置值?
问题解答
一、如何查询Spark特定属性的默认值
如果未手动指定任何Spark属性,想获取默认值可以通过以下几种方式:
- 查阅Spark官方文档:所有配置项的默认值都有明确说明,部分配置的默认值还会随部署模式变化(比如
spark.executor.cores在本地模式默认取当前机器CPU核心数,YARN/Standalone模式默认值为1)。 - 查看Spark配置模板文件:Spark安装目录下的
conf/spark-defaults.conf.template中,列出了绝大多数配置的默认值。 - 通过代码判断默认逻辑:对于核心配置(非
spark.sql.*前缀),若未显式设置,spark.sparkContext.getConf().get()会报错,但可以用getOption()返回Optional对象,再结合Spark的默认规则推断;不过这种方式不如查文档直接。
二、为什么查询spark.executor.cores会报错,其他情况结果不同
这是因为Spark的配置分属不同的管理模块:
- SQL专属配置(
spark.sql.*前缀):这类配置由spark.conf(即SQLConf)管理,默认值会被主动加载到配置对象中,所以你用spark.conf.get("spark.sql.shuffle.partitions")能直接拿到默认的200。 - Spark核心配置(如
spark.executor.*、spark.driver.*等):这类配置属于SparkContext的核心配置,只有当你显式设置时(比如通过spark-submit参数、配置文件、代码初始化SparkConf时指定),才会被写入spark.sparkContext.getConf()对象。默认值不会被显式存储在该对象中,而是Spark运行时根据部署模式动态确定,所以:- 用
spark.conf.get("spark.executor.cores")会报错,因为spark.conf只负责SQL相关配置,不管理核心配置项。 - 用
spark.sparkContext.getConf().getAll()看不到这些配置,因为默认值没有被显式写入配置对象。
- 用
举个例子,如果你启动Spark时通过--conf spark.executor.cores=4显式设置,那么无论是spark.sparkContext.getConf().get("spark.executor.cores")还是遍历getAll(),都能获取到这个值,但默认情况下就不行。
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

