硬件类
CPU
spark.cores.max 集群范围内满配CPU核数
spark.executor.cores 单个Executor内CPU核数
spark.task.cpus 单个任务消耗的CPU核数
spark.default.parallelism 未指定分区数时的默认并行度,在没有明确分区规则时起作用
spark.sql.shuffle.partitions 数据关联、聚合操作中Reducer的并行度,默认是200
内存
spark.executor.memory 单个Executor内堆内内存总大小
spark.memory.offHeap.enabled 是否启用堆外内存,默认为False
spark.memory.offHeap.size 单个Executor内堆外内存总大小
spark.memory.fraction 堆内内存中,用于缓存RDD和执行计算的内存比例(即userMemory之外的内存)
spark.memory.storageFraction 用于缓存RDD的内存占比,执行内存占比为
spark.rdd.compress RDD 缓存是否压缩,默认不压缩
磁盘
spark.local.dir 用于缓存RDD和Shuffle中间文件的磁盘目录
硬件资源类
CPU
spark.cores.max 集群范围内满配CPU核数
spark.executor.cores 单个Executor内CPU核数
spark.task.cpus 单个任务消耗的CPU核数
spark.default.parallelism 未指定分区数时的默认并行度
spark.sql.shuffle.partitions 数据关联、聚合操作中Reducer的并行度
内存
spark.executor.memory 单个Executor内堆内内存总大小
spark.memory.offHeap.enabled 是否启用堆外内存,默认为False
spark.memory.offHeap.size 单个Executor内堆外内存总大小
spark.memory .fraction 堆内内存中,用于缓存RDD和执行计算的内存比例
spark.memory.storageFraction 用于缓存RDD的内存占比,执行内存占比为1 -
spark.memory.storageFraction
spark.rdd.compress RDD缓存是否压缩,默认不压缩
磁盘
spark.local.dir 用于缓存RDD和Shuffle中间文件的磁盘目录
Shuffle 类
spark.shuffle.file.buffer Map 输出端的写入缓冲区大小,缓存越大落盘次数越小
spark.reducer.maxSizelnFlight Reduce输入端的读取缓冲区大小,缓存越大网络传输次数越小
spark.sql.autoBroadcastJoinThreshold 广播阈值
Spark SQL
spark.shuffle.sort.bypassMergeThreshold Map阶段不进行排序的分区阈值
AQE
spark.sql.adaptive.enabled 是否启用AQE (Adaptive query execution),默认禁用
AQE分区合并
- 分区合并阈值计算公式:min(指定尺寸,数据集大小/指定最小分区数)
spark.sql.adaptive.coalescePartitions.enabled 是否启用AQE中的自动分区合并,默认启用
spark.sql.adaptive.advisoryPartitionSizelnBytes 由开发者指定分区合并后的推荐尺寸
spark.sql.adaptive.coalescePartitions.minPartitionNum 分区合并后,数据集的分区数不能低于该值
AQE数据倾斜
- 是否数据倾斜:分片大小 > 中位数*放大因子 && 分片大小 > 倾斜阈值
spark.sql.adaptive.skewJoin.enabled 是否开启AQE中自动处理数据倾斜的功能,默认开启 spark.sql.adaptive.skewJoin.skewedPartitionFactor 判定数据分区是否倾斜的比例系数
spark.sql.adaptive.skewJoin.skewedPartitionThresholdlnBytes 判定数据分区是否倾斜的最低阈值
spark.sql.adaptive.advisoryPartitionSizelnBytes 以字节为单位,拆分倾斜分区的数据粒度
AQE Join策略
- 动态判断是否可以降级为brodcast join
- 过滤之后的非空分区数要小于指定比例
spark.sql.autoBroadcastJoinThreshold 数据表采用Broadcast Join实现方式的最低阈值
spark.sql.adaptive.nonEmptyPartitionRatioForBroadcastJoin 非空分区比例小于该值,才会调整Join策略
查看数据集大小的方法
val df: DataFrame = _
df.cache.count
val plan = df.queryExecution.logical
val estimated: BigInt = spark
.sessionState
.executePlan(plan)
.optimizedPlan
.stats
.sizeInBytes