每日一题谈谈Spark中的容错机制?

Posted 勾叔谈大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题谈谈Spark中的容错机制?相关的知识,希望对你有一定的参考价值。

大家好,我是勾叔。今天的面试题为:谈谈Spark中的容错机制?



核心问题回答




容错是指一个系统部分出现错误的情况还能持续的提供服务,当集群达到较大的规模以后,很可以出机器故障以及网络延迟等情况,导致某个节点不能提供服务,分布式框架一般都会进行高容错设计。

Master容错
只有Standalone模式下才需要进行Master容错配置。如果是Spark On Yarn模式,资源由 ResourceManager 管理,Yarn通常配置有相应的容错机制,无需外部再进行配置。
Standalone模式下会启动多个Master,仅有一个Master处于Action状态,其他为StandBy状态。当前Master异常时,会按照一定规则从中选取一个接替原Master的工作,有如下几种可选配置:ZOOKEEPER、FILESYSTEM、CUSTOM

Worker容错
Worker也是 Standalone 模式下才有的概念,Spark On Yarn模式中对应的是NodeManager,Yarn自身带有NodeManager的容错机制。
在 Standalone 模式中,Worker会保持和Master的心跳。当 Worker 出现超时,根据 Worker 运行的是 Executor 还是 Driver 分别进行处理:
  • 如果是 Executor,Master 给对应的 Driver 发送消息,告知 Executor 已丢失,同时把这些 Executor 从其应用程序运行列表中删除。并且相关 Executor 的异常也需要按照 Executor 进行处理
  • 如果是 Driver,则判断是否需要设置重新启动。如果需要分配合适节点重启 Driver;如果不需要重启,则删除该应用程序

Executor容错
Executor真正负责任务的执行,并将任务的运行状态发送给Driver。
Executor发生异常时,会把异常信息发送给Worker,然后Worker会讲信息发送给Master。Master 接收到 Executor 状态变化消息后,如果发现 Executor 出现异常退出,则尝试获取可用的 Worker 节点并重新启动 Executor。
重新启动一个新的Executor会尝试一定次数,如果还不成功,那么整个application就运行失败了。这样是为了保证 application 不会一直占用集群资源。

Stage容错
stage失败会重试,默认重试4次,有参数 spark.stage.maxConsecutiveAttempts 控制

Task容错
task级别的重试,同一个task失败4次才会被影响,不同的task失败不相互影响

RDD容错
RDD实现基于Lineage的容错机制,基于RDD的transformation构成了计算依赖,在部分计算结果丢失的时候可以根据Lineage重新恢复计算。如果lineage过长还可使用checkpoint机制



问题扩展




这些知识分开都讲过,但是要能放在一起,它们解决都是同一个问题。通常我们只能描述其中的一部分。
大家如果想进行更深入的了解和学习,请关注勾叔谈大数据参与更多互动。



推荐阅读:




以上是关于每日一题谈谈Spark中的容错机制?的主要内容,如果未能解决你的问题,请参考以下文章

每日一题谈谈你对函数式编程的理解?

每日一题介绍Spark核心组件及功能?

爱创课堂每日一题第三十二天-谈谈浮动和清除浮动?

爱创课堂每日一题第二十天- 谈谈性能优化问题?

每日一题 为了工作 2020 0426 第五十五题

每日一题 为了工作 2020 0508 第六十六题