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

在 PySpark 中,当某个节点或任务失败时,系统采用哪些机制来保证作业能够继续执行并恢复?请列举并解释几种主要的容错手段。

数据技术原理方案权衡问题排查PySpark

考察说明

考查对 PySpark 底层容错机制(尤其是 RDD 血统和 Checkpoint)的理解,以及面对故障时的恢复策略。

回答思路

  1. 【回答框架 1】PySpark 的容错核心是 RDD 的依赖关系和血统(Lineage)。每个 RDD 都记录了它是如何从其他 RDD 转换而来的,当分区数据丢失时,可以通过重新执行转换操作来重建丢失的分区,这是 Spark 最基础的容错机制,无需数据复制,但重算可能耗时。
  2. 【回答框架 2】对于代价高昂或依赖链很长的 RDD,Shuffle 或复杂计算可能导致重算开销大,此时可使用 Checkpoint 机制。Checkpoint 将 RDD 数据物理保存到可靠的存储(如 HDFS、S3),切断血统,之后直接读取存储数据恢复,避免重复计算。
  3. 【回答框架 3】此外,Spark 还通过任务重试(Task Retry)和阶段重试(Stage Retry)来处理节点故障。调度器会检测失败任务,并在其他可用节点上重新执行,如果阶段失败次数达到阈值,会重新提交整个阶段。
  4. 【回答框架 4】对于数据源,Spark 也支持从外部持久化系统恢复,例如读取 Kafka 时结合偏移量管理实现精确一次语义,但这属于更高层的数据一致性保障,与 RDD 级别的容错互补。
  5. 【关键点 1】RDD 血统(Lineage)是核心容错机制,通过重算重建丢失分区。
  6. 【关键点 2】Checkpoint 适合计算链长或重算代价高的场景,可切断血统。
  7. 【关键点 3】任务重试和阶段重试处理节点故障,Spark 调度器自动重新执行。
  8. 【关键点 4】容错机制不能保证业务幂等,若需幂等需额外设计唯一键和状态记录。
  9. 【易错点 1】不要混淆 Checkpoint 与缓存(Cache):Cache 不提供容错,只是内存复用,数据丢失后仍需血统重算。
  10. 【易错点 2】不要过度依赖重算,对于长血统应使用 Checkpoint 或调整并行度,否则恢复时间可能过长。
  11. 【易错点 3】注意 Checkpoint 会带来额外存储和写开销,需在容错与性能间权衡。