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

在 Apache Spark 中处理大规模数据时,Join 操作常成为性能瓶颈。请阐述在 Spark 中进行 Join 优化的一般性策略,并列举几种常见的优化手段及其适用场景。

数据性能优化技术原理问题排查Apache Spark

考察说明

考查对 Spark Join 原理及优化策略的掌握程度,包括 Shuffle、广播、数据倾斜等关键点。

回答思路

  1. 【回答框架 1】Spark Join 的核心开销在于 Shuffle 和网络传输。优化目标通常是减少 Shuffle 数据量或避免 Shuffle。常见手段包括:广播小表、使用 Bucketing 或 Sort-Merge Join 预排序、调整并行度、解决数据倾斜等。
  2. 【回答框架 2】广播 Join:当一个表很小(默认阈值 10MB,可配置)时,将小表广播到每个 Executor,避免 Shuffle。适用于大表 join 小表的场景。注意广播表不能被广播变量更新,且需要足够的内存。
  3. 【回答框架 3】Sort-Merge Join:默认使用的 Join 策略,需要两侧数据按 Join key 排序并分区,适合大规模等值 Join。通过预先进行 Bucketing 和 Sort 可以避免 Shuffle,即 Bucketed Sort-Merge Join。
  4. 【回答框架 4】数据倾斜处理:若某个 key 数据量过大,可对倾斜 key 加随机前缀并进行两次 Join(先处理非倾斜数据,再处理倾斜数据)。也可使用 Salting 技术。此外,调整 Spark 的 Skew Join 优化参数(如 adaptive 框架下的优化)也有帮助。
  5. 【回答框架 5】其他优化:合理设置并行度(spark.sql.shuffle.partitions),启用动态分区修剪(Dynamic Partition Pruning),使用 Join Hint 强制指定策略等。需结合实际数据和集群资源进行调优。
  6. 【关键点 1】Broadcast Join 可避免 Shuffle,适合小表。
  7. 【关键点 2】Sort-Merge Join 是默认的等值 Join 策略,可结合 Bucketing 优化。
  8. 【关键点 3】数据倾斜时可采用加盐或拆分 key 的方式解决。
  9. 【关键点 4】使用 Spark 的 Adaptive Query Execution(AQE)自动优化 Join 策略。
  10. 【关键点 5】合理配置 shuffle 分区数能减少小文件问题。
  11. 【易错点 1】广播表过大可能导致 OOM。
  12. 【易错点 2】数据倾斜处理不当可能造成二次倾斜。
  13. 【易错点 3】过度使用 Bucketing 可能浪费存储和算力。