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

在Apache Spark中,宽依赖与窄依赖分别指什么?请对比二者的区别及其对任务调度和容错机制的影响。

数据技术原理Apache Spark

考察说明

考查对Spark依赖关系及其对执行效率与容错影响的理解。

回答思路

  1. 【回答框架 1】窄依赖指父RDD的每个分区最多被子RDD的一个分区使用,如map、filter操作。宽依赖指父RDD的每个分区可能被多个子分区使用,如groupByKey、join操作。
  2. 【回答框架 2】窄依赖支持流水线执行,任务在单个节点上连续处理,无需数据混洗;宽依赖需要shuffle,数据在不同节点间传输,带来网络和磁盘开销。
  3. 【回答框架 3】窄依赖的容错恢复较快,只需重新计算丢失的分区;宽依赖需重新计算父RDD的所有分区并重新shuffle,代价更高。
  4. 【回答框架 4】调度上,窄依赖可在一个stage内并行执行,宽依赖引入stage边界,需等待所有父任务完成。
  5. 【回答框架 5】在实际应用中,应优先使用窄依赖操作(如map、filter、union)以减少shuffle,必要时才使用宽依赖。
  6. 【关键点 1】窄依赖父分区至多对应一个子分区,宽依赖对应多个。
  7. 【关键点 2】窄依赖无需shuffle,支持流水线执行,宽依赖引入shuffle与stage边界。
  8. 【关键点 3】窄依赖容错成本低,宽依赖需重新计算并shuffle。
  9. 【关键点 4】优先选择窄依赖以提高性能。
  10. 【易错点 1】不能将宽依赖简单视为性能差,某些场景必须使用。
  11. 【易错点 2】忽略数据倾斜对宽依赖的影响会导致任务不均衡。
  12. 【易错点 3】错误认为所有join都是宽依赖,某些广播join实际是窄依赖。