Spark CPU 相关配置

CPU 个数配置

  • spark.cores.max: 从集群粒度配置 CPU 个数;
  • spark.executor.cores: 从 Executor 粒度配置 CPU 个数;
  • spark.task.cpus: 从计算任务配置 CPU 个数;

并行度配置

  • spark.default.parallelism: 对于没有明确分区规则的 RDD 设置 Spark 任务的默认并行度;
  • spark.sql.shuffle.partitions: 明确指定数据关联或聚合操作中 Reduce 端的分区数量;

Spark 内存相关配置

堆外内存

  • spark.memory.offHeap.enabled: 是否开启堆外内存(true/false)
  • spark.memory.offHeap.size: 堆外内存大小

堆内内存

  • spark.memory.fraction: 堆内内存中,用于缓存 RDD 和执行计算的内存比例,这个值在 Spark 2.0+ 为 60%,Spark 1.6 为 75%;
  • spark.memory.storageFraction: 配置 Storage Memory 的比例,用于缓存 RDD 数据;
  • spark.rdd.compress: RDD 缓存是否压缩,默认不压缩;

Spark 磁盘相关配置

  • spark.local.dir: 允许开发者设置磁盘目录,用于存储 RDD Cache 数据落盘和 Shuffle 中间文件;

Spark Shuffle 相关配置

  • spark.shuffle.file.buffer: Map 写入端缓冲区的大小;
  • spark.reducer.maxSizeInFlight: Reduce 输入端的读取缓冲区大小;
  • spark.shuffle.sort.bypassMergeThreshold: Map 阶段不进行排序的分区阈值;

Spark SQL 相关配置

注:这里使用的 Spark 3.0 中的配置,但我自己使用的是 Spark 2.4 版本,这里的配置是根据网上博客进行摘录的;相关的配置详细信息可以查看官网:Spark 配置官网

  • spark.sql.adaptive.enabled: 用于开启 Spark AQE,默认是关闭的(version 1.6.0);
  • spark.sql.adaptive.advisoryPartitionSizeInBytes: 由开发者指定分区合并尺寸(version 3.0.0);
  • spark.sql.adaptive.coalescePartitions.minPartitionNum: 在合并分区后,新的分区数不能小于这个值;

Spark 数据倾斜相关配置

  • spark.sql.adaptive.skewJoin.enabled: 是否开启 AQE 自动处理数据倾斜功能,默认开启(version 3.0.0);
  • spark.sql.adaptive.skewJoin.skewedPartitionFactor: 数据倾斜比例系数(version 3.0.0);
  • spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes: 判定数据倾斜的最低阈值(version 3.0.0);
  • spark.sql.adaptive.advisoryPartitionSizeInBytes: 以字节为单位,拆分倾斜分区的数据粒度(version 3.0.0);

Spark Sql Join 相关配置

  • spark.sql.autoBroadcastJoinThreshold: 采用 Broadcast Join 的最低阈值,也就是说,Join 的两个表中有一个小于这个阈值,就会变成 Broadcast Join(version 1.0.0);
  • spark.sql.adaptive.nonEmptyPartitionRatioForBroadcastJoin: 触发 Broadcast Join 的分区比例阈值,因为这个配置需要与 Spark 3.x 中的 AQE 配合使用,所以在低版本中不存在该配置;