Spark工作机制

问题分析

面试官主要考察的是学员对于大数据Spark阶段的原理的掌握,主要考核学员对Spark的整体架构的实现。

核心答案讲解

在spark的核心架构机制中!有很多中机制,如Spark的容错机制、Shuffle机制等,都是属于Spark的核心机制。

容错机制:RDD之间的算子操作会形成DAG图,RDD之间的依赖关系会形成Lineage。要理解Lineage机制首先要明确两种依赖的概念:

Shuffle Dependencies(宽依赖) ,父分区可以被多个子分区所用 ,即多对多的关系。Narrow Dependencies(窄依赖) ,父分区最多被一个子分区所用 ,即一对一或者多对一的关系。

当出现某个节点计算错误的时候,会顺着RDD的操作顺序往回走。一旦是Narrow Dependencies错误,重新计算父RDD分区即可,因为其不依赖其他节点 ,而如果Shuffle Dependencies错误,重算代价较高,因为一旦重新计算其依赖的父RDD分区,会造成冗余计算。这时候就需要人为的添加检查点来提高容错机制的执行效率。

什么情况下需要加CheckPoint?
RDD通过persist方法或cache方法可以将前面的计算结果缓存,供后面重用。但缓存的数据丢失可能性很大,磁盘、内存都可能会存在数据丢失的情况。此时就会根据DAG的依赖关系重新进行计算。如果DAG中的Lineage过长,重算开销太大。但是checkpoint的数据通常是存储在如HDFS等容错、高可用的文件系统,数据丢失可能性较小。因此在特定几个Shuffle Dependencies上做CheckPoint是有价值的,可以避免重复计算。Checkpoint会在持久化到HDFS时对rdd进行二次计算,所以做检查点(rdd.checkpoint())的RDD最好是已经在内存中缓存了(rdd.cache()),这样第二次运行的Checkpoint-job 就不用再去计算该 rdd 了,直接读取 cache后写入磁盘。

问题扩展

在整个工作机制中,不仅仅有容错机制的存在,还有Shuffle机制、i/o机制、调度机制等。

结合项目中使用

在我们去执行我们的Spark程序的时候,当有成千的计算需要去执行的时候,适当的使用checkpoint机制,会很大程度提升我们的效率。

点击此处
隐藏目录