Spark3.0.0 新加入的 解决数据倾斜的性能优化 Optimizing Skew Join

Spark3.x新加入的数据倾斜性能优化Optimizing Skew Join

Data skew can severely downgrade the performance of join queries.
数据倾斜会严重降低连接查询的性能。

This feature dynamically handles skew in sort-merge join by splitting (and replicating if needed) skewed tasks into roughly evenly sized tasks.
该特性通过将倾斜任务拆分(并在需要时复制)为大小大致相同的任务来动态处理排序合并连接中的倾斜。

It takes effect when both spark.sql.adaptive.enabled and spark.sql.adaptive.skewJoin.enabled configurations are enabled.
它在spark.sql.adaptive.enabledspark.sql.adaptive.skewJoin.enabled 这俩配置都开启时生效。

Spark3.0.0 新加入的 解决数据倾斜的性能优化 Optimizing Skew Join

属性名 默认值 开始适用的版本
spark.sql.adaptive.skewJoin.enabled true 3.0.0
spark.sql.adaptive.skewJoin.skewedPartitionFactor 10 3.0.0
spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes 256MB 3.0.0
  • spark.sql.adaptive.skewJoin.enabled

当这个属性值为true且另一个属性spark.sql.adaptive.enabled也为true时,Spark通过拆分(并在需要时复制)倾斜分区,动态地处理排序合并连接中的倾斜。

  • spark.sql.adaptive.skewJoin.skewedPartitionFactor

如果一个分区的大小大于这个数乘以分区大小的中值,并且也大于spark.sql.adaptive.skewedPartitionThresholdInBytes这个属性值,那么就认为这个分区是倾斜的,这是分区是否倾斜的判断机制。

判断条件:
条件1:skewedPartitionFactor * 当前分区大小> 所有分区大小的中值
条件2:skewedPartitionFactor * 当前分区大小> skewedPartitionThresholdInBytes
当条件1和条件2都满足时,认为当前分区是倾斜的。

  • spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes

它本身是判断数据倾斜的一个阈值
理想情况下,这个配置应该设置大于spark.sql.adaptive.advisoryPartitionSizeInBytes的值

一键三连不迷路~????