Ch06-Spark 之容错机制

Ch06-Spark 之容错机制

May 30, 2019
Apache Spark
spark

Spark 并不直接对数据进行处理,而是将数据抽象成了分布式数据集这种数据结构。目前该数据结构主要经历了三代变迁。

1. 作业容错 #

Spark RDD 实现基于 Lineage 的容错机制,基于 RDD 的各项 transformation 构成了 compute chain,在部分计算结果丢失的时候可以根据 Lineage 重新恢复计算。

  • 在窄依赖中,在子 RDD 的分区丢失,要重算父 RDD 分区时,父 RDD 相应分区的所有数据都是子 RDD 分区的数据,并不存在冗余计算。
  • 在宽依赖情况下,丢失一个子 RDD 分区,重算的每个父 RDD 的每个分区的所有数据并不是都给丢失的子 RDD 分区用的,会有一部分数据相当于对应的是未丢失的子 RDD 分区中需要的数据,整个 RDD 都要重新计算,这样就会产生冗余计算开销和巨大的性能浪费。所以如果调用链路比较长的话,宽依赖最好做一次 Checkpoint。

Lineage 过长会造成容错成本过高,这时在中间阶段做 Checkpoint 容错,如果之后有节点出现问题而丢失分区,从 Checkpoint 的 RDD 开始重做 Lineage,就会减少开销。

2. 守护进程容错 #

Master 和 Worker 运行在 Yarn 上面后,借助 Yarn 的容错(重启)机制,来实现守护作业容错。

3. 总结 #

Worker 或者 Executor 异常退出没关系,Spark stage 会重新执行调度。如果 Spark job 链路过长的话,建议在宽依赖那里执行 CheckPoint,加快 spark job 的恢复

4. 参考文献 #