数据岗位面试题更新 2026-08-05

针对 Apache Spark 作业中的数据倾斜问题,你会采取哪些手段来定位并缓解?请列举常用的调优思路与具体措施。

数据性能优化方案权衡问题排查Apache Spark

考察说明

考察对 Spark 数据倾斜问题的识别能力及常用优化策略的掌握程度。

回答思路

  1. 【回答框架 1】数据倾斜的本质是分区内数据量或计算量差异过大,导致少数任务执行时间远长于其他任务,拖慢整个作业。定位方法通常是在 Spark UI 中查看 Stage 的任务执行时间分布,或通过日志确认个别任务处理的数据量远超平均水平。
  2. 【回答框架 2】常见优化手段包括:增加并行度,调整 spark.sql.shuffle.partitions 或 repartition/coalesce 增加分区数;对 key 进行加盐(salting)处理,为热点 key 附加随机前缀或后缀,打散分布;过滤或单独处理极端倾斜的 key。
  3. 【回答框架 3】对于聚合类操作(如 groupByKey、reduceByKey),可先进行局部聚合再全局聚合;对于 join 操作,可先将小表广播到每个 executor,避免 shuffle;若大表 join 小表仍倾斜,可考虑将倾斜 key 拆分并分别处理。
  4. 【回答框架 4】使用自适应查询执行(AQE)时,Spark 会自动合并小分区、调整 join 策略,但需开启相关配置并注意其适用版本。优化后需通过压测验证效果,并持续监控任务运行时间。
  5. 【关键点 1】数据倾斜的根源是分区数据不均衡,表现为少数任务运行时间过长。
  6. 【关键点 2】常用策略包括增加分区数、加盐打散、过滤极端 key、局部聚合加全局聚合、广播 join。
  7. 【关键点 3】优先定位倾斜 key,避免盲目调参;使用 AQE 需确认版本支持并开启 config。
  8. 【易错点 1】加盐会改变 key 分布,但可能增加 shuffle 数据量,需权衡。
  9. 【易错点 2】广播 join 只适合小表,表过大会导致 driver OOM。
  10. 【易错点 3】增加并行度不一定能解决倾斜,若热点 key 无法拆分,效果有限。