Spark RDD的容错机制是怎么做的?

提问者:帅平 问题分类:面试刷题
Spark RDD的容错机制是怎么做的?
4 个回答
逾
一般来说,分布式数据集的容错性有两种方式:数据检查点和记录数据的更新。Spark选择的是记录数据的更新,因为数据检查点其实需要通过数据中心的网络连接在不同的机器之间复制数据,而网络的带宽往往比内存的带宽低的多,并且需要消耗大量的存储资源。但记录的太细其实也会消耗大量的资源。所以RDD只支持粗粒度的转换,也就是RDD的DD的容错机制又称“血统(Lineage)”)记录下来,以便恢复丢失的分区。
发布于:3个月前 (01-22) IP属地:四川省
拽萌少女ω
拽萌少女ω
关于checkpoint容错如下:
Spark checkpoint通过将RDD写入Disk作检查点,是Spark lineage容错的辅助,lineage过长会造成容错成本过高,这时在中间阶段做检查点容错,如果之后有节点出现问题而丢失分区,从做检查点的RDD开始重做Lineage,就会减少开销。
checkpoint主要适用于以下两种情况:
1、DAG中的Lineage过长,如果重算,开销太大,如PageRank、ALS等。
2、尤其适合在宽依赖上作checkpoint,这个时候就可以避免为Lineage重新计算而带来的冗余计算。
发布于:3个月前 (01-22) IP属地:四川省
步江湖
步江湖
关于RDD Lineage血统容错如下:
Spark中RDD采用高度受限的分布式共享内存,且新的RDD的产生只能够通过其他RDD上的批量操作来创建,依赖于以RDD的Lineage为核心的容错处理,在迭代计算方面比Hadoop快几十倍,同时还可以在5~7s内交互式地查询TB级别的数据集。
Spark RDD实现基于Lineage的容错机制,基于RDD的各项transformation构成了compute chain,在部分计算结果丢失的时候可以根据Lineage重新恢复计算。
1、在窄依赖中,在子RDD的分区丢失,要重算父RDD分区时,父RDD相应分区的所有数据都是子RDD分区的数据,并不存在冗余计算。
2、在宽依赖情况下,丢失一个子RDD分区,重算的每个父RDD的每个分区的所有数据并不是都给丢失的子RDD分区用的,会有一部分数据相当于对应的是未丢失的子RDD分区中需要的数据,这样就会产生冗余计算开销和巨大的性能浪费。
发布于:3个月前 (01-22) IP属地:四川省
我来回答