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.enabled
和spark.sql.adaptive.skewJoin.enabled
这俩配置都开启时生效。
属性名 | 默认值 | 开始适用的版本 |
---|---|---|
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
的值