1 执行参数
spark.sql.crossJoin.enabled=true:控制是否允许 cross join.
spark.sql.decimalOperations.allowPrecisionLoss=false:控制在进行小数运算时是否允许精度损失.
2 性能优化参数
spark.executor.memory=15G:控制每个Executor的Java堆内存大小,用于存储数据和执行任务,设置小了可能导致内存溢出.
spark.yarn.executor.memoryOverhead=2G:控制每个Executor的额外内存开销,用于JVM开销、数据序列化等.一般设置为 spark.executor.memory 的10%左右.
spark.sql.autoBroadcastJoinThreshold=104857600:设置自动广播连接的阈值.
spark.sql.shuffle.partitions= 40:设置Shuffle操作中的分区数量,直接影响到生成的文件数量和并行度.
spark.sql.parquet.output.maxRecordsPerFile=1000000:控制在写入Parquet文件时每个文件的最大记录数,默认为1000万.数据量大时须适当调小,以平衡读写性能和并行度.
spark.default.parallelism:指定默认的并行度.
3 资源管理参数
spark.sql.adaptive.enabled=true:启用自适应查询执行.
spark.sql.adaptive.advisoryPartitionSizeInBytes=256m:自适应查询中,设置目标分区大小,并将单个大分区拆分为多个较小的分区,小分区的大小控制在128m-1g之间.如果分区太大,可能会导致单个任务处理时间过长.
spark.sql.adaptive.shuffle.targetPostShuffleInputSize=256m:自适应查询中,设置Shuffle后的目标分区大小.一般和 advisoryPartitionSizeInBytes 设置为相同的值.
spark.sql.adaptive.skewJoin.skewedPartitionThresholdlnBytes=512m:自适应查询中,数据倾斜的分区的大小阈值,用于检测和处理数据倾斜.通常比 advisoryPartitionSizeInBytes 和 targetPostShuffleInputSize 大一些.
spark.dynamicAllocation.enabled:启用或禁用动态资源分配功能.
spark.dynamicAllocation.minExecutors:指定动态资源分配模式下的最小执行器数量.