我在spark中遇到了一个问题,两个数据集的连接时间太长了。其中一个(或两个)数据集中有倾斜的数据,它被用作连接列。
所以我启用了spark AQE,希望它能帮助我处理倾斜的数据集连接。然而,当我检查SQL查询指标时,他们并没有建议AQE帮助我处理倾斜,并且一些分区仍然很大。当我检查阶段状态时,我发现一些长时间运行的任务需要几个小时才能完成。
我对AQE的行为感到非常困惑,并且非常惊讶地发现它似乎没有帮助。有人能指出这里有什么问题吗?或者我错过了什么?
顺便说一句,这里是我的一些Spark配置:
.config("spark.sql.adaptive.enabled", "true") \
.config("spark.sql.adaptive.skewJoin.enabled", "true") \
.config("spark.executor.memory", "32g") \
.config("spark.executor.memoryOverhead", "8g") \
.config("spark.sql.shuffle.partitions", "2000") \
1条答案
按热度按时间xyhw6mcr1#
在3.0到3.2版本中,AQE斜连接优化仍然是非常初级的。如果您手动更改分区的数量,那么它将被跳过。同样,如果您使用缓存,大部分AQE将被跳过。在3.3中,您可以在使用config
spark.sql.adaptive.forceOptimizeSkewedJoin
手动分区时强制进行斜连接优化。