Spark的数据容错机制

一般而言,分布式数据集的容错性具备两种方式:数据检查点和记录数据的更新

  • checkpoint机制——数据检查点
  • 记录更新机制(在Saprk中对应Lineage机制)

 

 

checkpoint机制

  • checkpoint的意思是建立检查点,类似于快照,传统的Spark任务计算过程中,DAG特别长,集群需要将整个DAG计算完成得到结果,但是如果在这个漫长的计算过程中出现数据丢失,Spark又会根据依赖关系重新从头开始计算一遍结果,这样很浪费性能,当然我们可以考虑将中间计算结果cache或者persist到内存或者磁盘中,但是这样不能保证数据完全不丢失,存储的内存出现了问题或者磁盘坏掉,也会导致Spark再次根据RDD重新再次计算一遍,所以就出现了checkpoint机制,其中checkpoint的作用就是将DAG中比较重要的中间计算结果存储到一个高可用的地方,通常这个地方是HDFS里面。 
      
  • 另外需要注意cache和checkpoint机制之间的区别:
    1. 检查点是新建一个job来完成的,是执行的完一个job之后,新建一个来完成的;而cache,是job执行过程中进行。
    2. 检查点对RDD的checkpoint是将数据的血统截断,只保存了想要保存的RDD在HDFS中,而cache的是计算血统的数据在内存中。
    3. 缓存的清除方式也不一样,checkpoint到HDFS中的RDD需要手动清除,如果不手动清除,会一直存在,可以被下一个驱动程序所使用;而cache到内存和persist到磁盘的partition, 由 blockManager 管理。一旦 driver program 执行结束,也就是 executor 所在进程 CoarseGrainedExecutorBackend stop,blockManager 也会 stop,被 cache 到磁盘上的 RDD 也会被清空(整个 blockManager 使用的 local 文件夹被删除)。

 

  1. checkpoint机制不足:操作成本高,需要通过数据中心的网络连接在机器之间复制庞大的数据集,而网络带宽往往比内存带宽低得多,同时还需要消耗更多的存储资源。因此Spark侧重于记录更新的方式。

 

Lineage机制

  RDD只支持粗粒度转换,即只记录单个块上执行的单个操作,然后将创建RDD的一系列变换序列(每个RDD都包含了他是如何由其他RDD变换过来的以及如何重建某一块数据的信息。因此RDD的容错机制又称“血统(Lineage)”容错)记录下来,以便恢复丢失的分区。 Lineage本质上很类似于数据库中的重做日志(Redo Log),只不过这个重做日志粒度很大,是对全局数据做同样的重做进而恢复数据。

  相比其他系统的细颗粒度的内存数据更新级别的备份或者LOG机制,RDD的Lineage记录的是粗颗粒度的特定数据Transformation操作(如filter、map、join等)行为。当这个RDD的部分分区数据丢失时,它可以通过Lineage获取足够的信息来重新运算和恢复丢失的数据分区。因为这种粗颗粒的数据模型,限制了Spark的运用场合,所以Spark并不适用于所有高性能要求的场景,但同时相比细颗粒度的数据模型,也带来了性能的提升。

  Rdd在Lineage依赖方面划分成两种依赖:窄依赖(Narrow Dependencies)与宽依赖,根据父RDD分区是对应1个还是多个子RDD分区来区分窄依赖(父分区对应一个子分区)和宽依赖(父分区对应多个子分 区)。

 

  • 第一,窄依赖可以在某个计算节点上直接通过计算父RDD的某块数据计算得到子RDD对应的某块数据;宽依赖则要等到父RDD所有数据都计算完成之后,并且父RDD的计算结果进行hash并传到对应节点上之后才能计算子RDD。
  • 第二,数据丢失时,对于窄依赖只需要重新计算丢失的那一块数据来恢复;对于宽依赖则要将祖先RDD中的所有数据块全部重新计算来恢复。所以在长“血统”链特别是有宽依赖的时候,需要在适当的时机设置数据检查点。也是这两个特性要求对于不同依赖关系要采取不同的任务调度机制和容错恢复机制。

 

a1c9bce7bf1a15921a26709b514603116c9.jpg 

转载于:https://my.oschina.net/134596/blog/3038047

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值