在spark的核心架构机制中!有很多中机制,如Spark的容错机制、Shuffle机制等,都是属于Spark的核心机制。
容错机制:
RDD之间的算子操作会形成DAG图,RDD之间的依赖关系会形成Lineage。
要理解Lineage机制首先要明确两种依赖的概念:
Shuffle Dependencies(宽依赖)
父分区可以被多个子分区所用 ,即多对多的关系
Narrow Dependencies(窄依赖)
父分区最多被一个子分区所用 ,即一对一或者多对一的关系
当出现某个节点计算错误的时候,会顺着RDD的操作顺序往回走。一旦是Narrow Dependencies错误,重新计算父RDD分区即可,因为其不依赖其他节点 ,而如果Shuffle Dependencies错误,重算代价较高,因为一旦重新计算其依赖的父RDD分区,会造成冗余计算
这时候就需要人为的添加检查点来提高容错机制的执行效率
什么情况下需要加CheckPoint
DAG中的Lineage过长,如果重算开销太大,故在特定几个Shuffle Dependencies上做CheckPoint是有价值的。
Checkpoint会产生磁盘开销,因为其就是将数据持久化到磁盘中,所以做检查点的RDD最好是已经在内存中缓存了。
在我们去执行spark程序的时候,当有成千的计算需要去执行的时候,适当的使用checkpoint机制,会很大程度提升我们的效率。