当前位置: 首页 > news >正文

Spark_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重新计算而带来的冗余计算。

http://www.lryc.cn/news/124861.html

相关文章:

  • VB+SQL期刊信息管理系统设计与实现
  • 如何在iPhone手机上修改手机定位和模拟导航?
  • Linux 当fork在for循环中的问题
  • 推断统计中非参数检验之卡方检验、列联表分析和游程检验
  • AI社交来了,百度、Soul“双向奔赴”
  • 【【verilog 典型电路设计之加法器树乘法器】】
  • 选择最适合自己的NIO, 一探流技术
  • 智能家居(3)---socket网络控制线程封装
  • ubuntu 安装 emscripten 时 install latest 安装报错问题
  • concrt140.dll丢失怎么恢复?教你5种修复方法
  • 【Vue-Router】路由入门
  • 蓝牙耳机运动耳机哪个好、好用的运动蓝牙耳机推荐
  • 大数据面试题:Kafka的ISR机制
  • Windows:解决MySQL登录ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor=YES)问题
  • springboot整合kafka多数据源
  • 基于CentOS 7 配置nginx负载均衡
  • WordToPDF2.java
  • k8s服务注册发现
  • IK分词器升级,MySQL热更新助一臂之力
  • 泛微 E-Office文件上传漏洞复现
  • bug的生命周期
  • mysql分库分表相关
  • 云原生k8s---资源限制、探针
  • html2canvas生成图片地址Base64格式转成blob在转成file(二进制)可正常发送(保姆教程,复制粘贴可用)
  • 将Linux上的cpolar内网穿透配置为开机自启动——“cpolar内网穿透”
  • 微信小程序data-item设置获取不到数据的问题
  • 创建百度百科需要什么条件?
  • 【springboot启动报错】java: 错误: 无效的源发行版:17
  • 无涯教程-Perl - setservent函数
  • Java创建多线程的最全方法