首页 理论教育 RDD容错的四大核心要点解析

RDD容错的四大核心要点解析

时间:2023-06-29 理论教育 版权反馈
【摘要】:2.RDD Lineage血统层容错Spark中RDD采用高度受限的分布式共享内存,且新的RDD的产生只能够通过其他RDD上的批量操作来创建,依赖于以RDD的Lineage为核心的容错处理,在迭代计算方面比Hadoop快20多倍,同时还可以在5~7s内交互式的查询TB级别的数据集。

RDD容错的四大核心要点解析

对于Spark框架层面的容错机制,主要可以分为三大层面,分别为调度层(包含DAG生成和Task重算两大核心)、RDD血统层和Checkpoint层。其中包含SparkRDD容错的4大核心要点:

·Stage输出失败,上层调度器DAGScheduler重试;

·Spark计算中Task内部任务失败,底层调度器重试;

·RDD Lineage血统中窄依赖、宽依赖计算;

·Checkpoint缓存

1.调度层

从调度层面讲,错误主要出现在两个方面,分别是在Stage输出时出错和计算时出错。

(1)DAG生成层

Stage输出失败,上层调度器DAGScheduler会进行重试,如下面的源代码所示。

(2)Task计算层

Spark计算过程中,计算内部某个Task任务出现失败,底层调度器会对此Task进行若干次的重试(默认为4次,如下述代码第2行所示)。以下为相关信息的源代码。(www.xing528.com)

2.RDD Lineage血统层容错

Spark中RDD采用高度受限的分布式共享内存,且新的RDD的产生只能够通过其他RDD上的批量操作来创建,依赖于以RDD的Lineage为核心的容错处理,在迭代计算方面比Hadoop快20多倍,同时还可以在5~7s内交互式的查询TB级别的数据集。

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

·在窄依赖中,在子RDD的分区丢失要重算父RDD分区时,父RDD相应分区的所有数据都是子RDD分区的数据,并不存在冗余计算;

·在宽依赖情况下,丢失一个子RDD分区重算的每个父RDD的每个分区的所有数据并不是都给丢失的子RDD分区用的,会有一部分数据相当于对应的是未丢失的子RDD分区中需要的数据,这样就会产生冗余计算开销和巨大的性能浪费。

3.Checkpoint层容错

Spark Checkpoint通过将RDD写入Disk做检查点,是Spark lineage容错的辅助,lineage过长会造成容错成本过高,这时候在中间阶段做检查点容错,如果之后有结点出现问题而丢失分区,从做检查点的RDD开始重做Lineage,就会减少开销。

Checkpoint主要适用于以下两种情况:

·DAG中的Lineage过长,如果重算时会开销太大,例如在PageRank、ALS等;

·尤其适合于在宽依赖上做Checkpoint,这个时候就可以避免应为Lineage重新计算而带来的冗余计算。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈