请阐述在 PySpark 环境下处理数据倾斜的常用策略,并列举可用的性能调优方法。
考察说明
考查对 PySpark 数据倾斜问题及其调优策略的理解。
回答思路
- 【回答框架 1】数据倾斜本质是分区数据量不均导致部分任务执行缓慢,根源包括 key 分布不均、join 或 groupBy 操作中热点 key 等。
- 【回答框架 2】调优方案包括:增加分区数(如 repartition、coalesce),对热点 key 加盐(如附加随机前缀)后再聚合或 join,使用广播变量优化 join,以及调整 Spark 配置如 spark.sql.shuffle.partitions 等。
- 【回答框架 3】具体操作时,需先定位倾斜任务,通过 Spark UI 观察 stage 和 task 耗时,确认倾斜 key,再针对不同操作(如 groupBy、join)选择合适的策略。
- 【回答框架 4】还需注意加盐后需二次聚合去除前缀,广播变量适用于小表场景,且应结合数据量和资源情况评估效果。
- 【回答框架 5】最终调优需通过实验对比,验证方案有效性和性能提升。
- 【关键点 1】数据倾斜源于分区数据量不均,常见于 join、groupBy 和 distinct 操作。
- 【关键点 2】常用策略包括加盐、广播变量、增加分区数和调整 shuffle 分区数。
- 【关键点 3】加盐后需要二次聚合,广播变量仅适合小表。
- 【关键点 4】通过 Spark UI 定位倾斜任务,针对性优化。
- 【关键点 5】调优需结合数据特征和资源,进行迭代测试。
- 【易错点 1】加盐不当可能引入数据膨胀和二次聚合开销。
- 【易错点 2】广播变量不适合大表,会因内存不足导致 OOM。
- 【易错点 3】仅增加分区数可能无法解决热点 key 问题,需结合加盐等策略。