Spark容错

容错、HA(高可用)与灾备

参考自点这里
容错(fault tolerance)指的是, 发生故障时,系统还能继续运行。

​ 飞机有四个引擎,如果一个引擎坏了,剩下三个引擎,还能继续飞,这就是"容错"。同样的,汽车的一个轮子扎破了,剩下三个轮子,也还是勉强能行驶。

​ 容错的目的是,发生故障时,系统的运行水平可能有所下降,但是依然可用,不会完全失败。

高可用(high availability)指的是, 系统能够比正常时间更久地保持一定的运行水平。

​ 汽车的备胎就是一个高可用的例子。如果没有备胎,轮胎坏了,车就开不久了。备胎延长了汽车行驶的可用时间。

​ 注意,高可用不是指系统不中断(那是容错能力),而是指一旦中断能够快速恢复,即中断必须是短暂的。如果需要很长时间才能恢复可用性,就不叫高可用了。上面例子中,更换备胎就必须停车,但只要装上去,就能回到行驶状态。

灾备(又称灾难恢复,disaster recovery)指的是, 发生灾难时恢复业务的能力。

​ 上图中,飞机是你的 IT 基础设施,飞行员是你的业务,飞行员弹射装置就是灾备措施。一旦飞机即将坠毁,你的基础设施就要没了,灾备可以让你的业务幸存下来。

​ 灾备的目的就是,保存系统的核心部分。一个好的灾备方案,就是从失败的基础设施中获取企业最宝贵的数据,然后在新的基础设施上恢复它们。注意,灾备不是为了挽救基础设置,而是为了挽救业务。

Spark架构

参考自 南京大学 Mapreduce课程
Spark容错_第1张图片

异常处理

参考自 图解Spark核心技术与案例实战 郭景瞻 电子工业出版社

  1. Executor异常

    • Executor启动过程:集群中的master节点给应用分配运行所需要的资源之后,Worker节点会启动ExecutorRunner,ExecutorRunner会根据当前运行模式启动GoarseGrainedExecutorBackend进程,他会向Driver发送注册Executor信息。如果注册成功,GoarseGrainedExecutorBackend会在内部启动Executor。Executor由ExecutorRunner进行管理,当Executor出现异常时,由ExecutorRunner捕获该异常,并发送ExecutorStateChanged消息给Worker。
    • Worker接收到异常信息后,在Worker上的HandlerExecutorStateChanged方法会依据Executor的状态进行信息更新,同时将Executor信息发送给Master。
    • Master接收到Executor状态变化后,如果发现Executor异常退出,则调用Master.schedule方法,尝试获取可用的Worker节点并启动Executor。而这个Worker节点很可能不是之前的Worker节点。系统会尝试10次,如果超过10次,则标记该应用程序失败,并从集群中移除。这种设定是为了避免反复提交有Bug的程序,占用系统资源。
  2. Worker异常

    • Spark集群中采用Master/Slaver模式。Worker扮演从节点,会定时给Master发送心跳信息,让Master知道Worker的实时信息。不仅如此,Master还会感知注册的Worker节点是否出现超时。
    • 为了感知Worker是否超时未发送心跳信息。在Master接收到Worker心跳的同时,在其启动方法onStart中启动Worker超时检测线程。
    • 当Worker出现异常时,会依据自身运行的是Executor还是Driver进行处理:
      • 如果运行的是Executor,Master会先把Worker上运行的Executor信息发送消息ExecutorUpdated给对应的Driver,告知Executor已丢失,同时把Executor从运行的应用程序列表中删除。之后在进行Executor异常的处理流程。
      • 如果运行的是Driver,则判断是否设置了重新启动。如果需要,则调用Master.schedule方法进行调度,分配合适节点重启Driver。否则就删除该应用。
  3. Master异常

    • Master异常牵涉到Spark的HA机制。
  • 在集群启动的时候,Master会启动一个或者多个standby Master,当Master出现异常的时候,standby会依据规则确定一个接管Master。有如下几种模式,默认是None。
    • Zookeeper:元数据持久化到Zookeeper中。
    • FileSystem:集群元数据持久化到本地文件系统中。
    • Custom:自定义恢复方式。
    • None:不持久化集群元数据。当Master出现异常时,新启动的Master不进行恢复集群状态,直接接管。

你可能感兴趣的:(大数据,spark,大数据)