更新时间:2024-03-12 GMT+08:00

数据倾斜优化

在Spark SQL多表Join的场景下,会存在关联键严重倾斜的情况,导致Hash分桶后,部分桶中的数据远高于其他分桶。最终导致部分Task过重,运行得很慢;其他Task过轻,运行得很快。一方面,数据量大Task运行慢,使得计算性能低;另一方面,数据量少的Task在运行完成后,导致很多CPU空闲,造成CPU资源浪费。

针对数据倾斜的情况,可以通过配置“spark.sql.adaptive.skewjoin.threshold”配置项,打开数据倾斜优化特性,即可感知数据分桶的桶大小。此时,如果某个桶数据量过大,发生了数据倾斜,则把倾斜的那个桶拆小,把倾斜数据平均到多个task里边进行处理,每个task对join表相同桶的数据进行全量拉取,从而充分利用CPU资源,提升整体的性能。

图1 倾斜数据Join转换