用php做的单车租赁网站,淘宝联盟自建网站教程,免费算命,wordpress 精简我们都知道Spark是弹性分布式数据集#xff0c;数据会存储在多台机器上#xff0c;那么如何确保在分布式数据计算中#xff0c;数据不丢失就是其中的关键的部分。本文主要讲解一下Spark中的容错机制。 Spark 主要提供了3个层面的数据容错机制。分别是 调度层#xff0c;RDD… 我们都知道Spark是弹性分布式数据集数据会存储在多台机器上那么如何确保在分布式数据计算中数据不丢失就是其中的关键的部分。本文主要讲解一下Spark中的容错机制。 Spark 主要提供了3个层面的数据容错机制。分别是 调度层RDD血统层, Checkpoint 层。在这3大层面中包括Spark RDD容错的4大核心要点.
(调度层)Stage输出失败上层调度器DAGScheduler重试。(调度层)Spark计算中Task内部任务失败底层调度器重试。(血统层)RDD Lineage血统中窄依赖宽依赖计算。(Checkpoint层)Checkpoint 缓存。 调度层
DAG生成层
Stage 输出失败上层调度器DAGScheduler 会进行重试
详细源码详见 Spark大数据商业实战三部曲p58 Task计算层
Spark计算过程中计算内部某个Task任务出现失败底层调度器会对此Task进行若干次重试默认4次
详细源码详见 Spark大数据商业实战三部曲p58 血统层 SparkRDD 实现基于Lineage的容错机制基于RDD的各项transformation 构成compute chain, 在部分计算结果丢失的时候可以根据Lineage重新恢复计算。
窄依赖 在子RDD的分区丢失需要重算父RDD分区时。父RDD相应分区的所有数据都是子RDD分区的数据并不存在冗余计算。
宽依赖 丢失一个RDD分区重算的每个父RDD的每个分区的所有数据并不是都丢给丢失的RDD的子RDD分区用的会有一部分数据相当于对应的是未丢失的子RDD分区中需要的数据这样就会产生冗余计算开销和巨大的性能浪费。 Checkpoint层 Spark checkpoint 通过将RDD写入Disk作为检查点是Spark lineage容错的辅助lineage过长会造成容错成本过高这时在中间阶段做检查点容错如果之后有节点出现问题而丢失分区从做检查点的RDD开始重做Lineage, 就会减少开销。
checkpoint 主要适用于以下两种情况
DAG中的Lineage过长如果重算开销太大如PageRank, ALS等尤其适合于在宽依赖上作checkpoint,这个时候就可以避免为Lineage重新计算而带来的冗余计算。