Spark Session配置值未更新求助:代码配置被覆盖问题
问题分析与解决方案
核心原因
Spark Session的配置生效存在优先级层级,且getOrCreate()方法会复用已存在的Session实例(若之前有初始化操作),导致代码中设置的部分配置被覆盖;另外部分YARN相关配置可能被集群侧的默认配置(如spark-defaults.conf、yarn-site.xml)或提交时的隐式配置覆盖。
解决办法
1. 确保创建全新的Spark Session
如果当前环境中已存在其他Spark Session实例,getOrCreate()会直接复用,导致自定义配置不生效。可在创建前先终止已有Session:
from pyspark.sql import SparkSession # 停止已激活的Session active_session = SparkSession.getActiveSession() if active_session: active_session.stop() # 创建新的Session spark = (SparkSession .builder .appName('LoadDev1') .config("spark.master","yarn") .config("spark.yarn.queue","uldp") .config("spark.tez.queue","uldp") .config("spark.executor.instances","5") .enableHiveSupport() .getOrCreate() ) return spark
2. 强制覆盖已有配置
Spark 3.0+版本支持在config()方法中添加force=True参数,强制覆盖已存在的配置项,避免被集群默认值或其他隐式配置覆盖:
spark = (SparkSession .builder .appName('LoadDev1') .config("spark.master","yarn") .config("spark.yarn.queue","uldp") .config("spark.tez.queue","uldp") .config("spark.executor.instances","5", force=True) .enableHiveSupport() .getOrCreate() )
3. 排查提交时的隐式配置
使用--verbose参数执行spark-submit,查看实际生效的所有配置项,确认哪个环节覆盖了自定义配置:
spark-submit --verbose --jars /app/spark3.3.1/jars/iceberg-spark-runtime-3.3_2.12-1.1.0.jar --conf spark.sql.shuffle.partitions=100 --conf spark.hive.vectorized.execution.enabled=false --py-files /home/path/SparkFactory_iceberg1.py
通过输出的配置列表,定位覆盖spark.executor.instances=5的来源。
4. 临时禁用集群默认配置(可选)
若集群spark-defaults.conf干扰过大,可在提交时指定不加载默认配置文件,但此方法需谨慎,可能导致其他必要集群配置失效:
spark-submit --verbose --jars /app/spark3.3.1/jars/iceberg-spark-runtime-3.3_2.12-1.1.0.jar --conf spark.sql.shuffle.partitions=100 --conf spark.hive.vectorized.execution.enabled=false --conf spark.driver.extraJavaOptions="-Dspark.driver.defaults.conf=none" --py-files /home/path/SparkFactory_iceberg1.py
内容的提问来源于stack exchange,提问作者Atif
相关产品推荐
相关产品推荐

