SparkCore(17):RDD的容错机制

一、概念

RDD 任务运行过程中,如果出错,spark会有相应的机制去进行错误修复,从而保证任务持续执行,即RDD容错机制。

二、具体容错分类

1.driver宕机

(1)如果job运行在client:程序直接挂了

(2)如果job运行在cluster:

    -》spark on standalone/mesos:通过spark-submit的参数--supervise可以指定当driver宕机的时候,在其他的节点上重新恢复.

[root@hadoop spark-2.1.0-bin-2.6.0-cdh5.7.0]# bin/spark-submit 
Usage: spark-submit [options] <app jar | python file> [app arguments]
Usage: spark-submit --kill [submission ID] --master [spark://...]
Usage: spark-submit --status [submission ID] --master [spark://...]
Usage: spark-submit run-example [options] example-class [example args]

Options:

......
 Spark standalone or Mesos with cluster deploy mode only:
  --supervise                 If given, restarts the driver on failure.
  --kill SUBMISSION_ID        If given, kills the driver specified.
  --status SUBMISSION_ID      If given, requests the status of the driver specified.
......

    -》spark on yarn:自动恢复四次

2.executor宕机

比如executor进程所在机器(worker)宕机、Executor和Driver之间通信超时。则Driver直接把坏掉的executor从Driver列表中移除,然后重新向Resourcemanager/master申请资源,自动在work或者NodeManager上重新启动一个executor重新执行任务

3.task执行失败

Task任务执行过程中产生异常导致Task执行失败,自动进行恢复,最多失败4次

(1)Task数据恢复/重新运行的机制实质上是RDD的容错机制,即Lineage机制

容错的方式为:rdd ineage(生命线)==>RDD的依赖,即提供的一种容错机制,当子RDD执行失败的时候,可以直接从父RDD进行恢复操作。

(a)如果父RDD的执行结果进行了缓存操作,子RDD直接从缓存位置获取结果数据;
(b)如果cache的不是全部数据的话,那么部分数据从缓存中读取,其它数据从父RDD的数据来源读取(会存在父RDD的代码逻辑的执行);
(c)如果子RDD失败的是单个分区

    -》如果父rdd和子rdd的关系是窄依赖,需要恢复父rdd对应分区的数据即可
    -》如果父rdd和子rdd的关系是宽依赖,需要将所有父rdd的数据都执行一遍

(2)如果Lineage生命线特别长,此时Task执行失败的恢复成本就比较高,需要使用checkpoint和cache来先做缓存,减少执行开销

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值