写点什么

手绘流程图讲解 spark 是如何实现集群的高可用

  • 2022 年 3 月 26 日
  • 本文字数:939 字

    阅读完需:约 3 分钟

本文分享自华为云社区《图解spark是如何实现集群的高可用》,作者:breakDawn。


我们看下 spark 是怎么针对 master、worker、executor 的异常情况做处理的。

容错机制-exeuctor 退出

首先可以假设 worker 中的 executor 执行任务时,发送了莫名其妙的异常或者错误,然后对应线程消失了。我们看这个时候会做什么事情

上图总结下来就是:executor 由 backend 进程包着,如果抛异常,他会感知到,并调用 executorRunner.exitStatus(), 通知 worker

看下通知 worker 之后发生了什么:


  • worker 会通知 master,master 会将 exectorInfo 清除,然后调度 worker 让他重新创建

  • 这里可以看到 worker 创建 executor 的指令仍然是让 master 来调度和管理的,不是自己想创建就创建。

  • 接下来就是重建 executor,然后重新开始执行这个地方的任务了(因此数据也会重新拉,之前发送端缓存的数据就能够派上用场了)



完整流程图如下:


worker 异常退出

假设此时是 worker 挂掉了, 那么正在执行任务的 exeuctor 和 master 会怎么做呢?如下:

可以看到 worker 有一个 shutdownHook,会帮忙关闭正在执行的 executor。但是此时 worker 挂了,因此没法往 master 发送消息了,怎么办?上一节有讲到 master 和 worker 之间存在心跳,因此就会有如下处理:

可以看到当 master 发现 worker 的心跳丢失时,会进行:

  • 删除执行列表里的 worker 信息

  • 重新下发创建 worker 的操作给对应 spark 节点

  • 通知 driver 这个 worker 里面的 exector 都已经 lost 了

看下此时 worker 重建和 driver 分别做了什么:

这里还可以看到 1 个很重要的概念:

  • master 关心 worker 状态

  • driver 会关心 executor 进展

  • exeuctor 重建后需要注册到 driver 上

完整流程图如下:


master 异常

由于 master 不参与任务的计算,只是对 worker 做管理,因此对于 master 的异常,分两种情况:

1:任务正常运行时 master 异常退出

则流程如下:

从这里可以看到当任务正常运行时,只会在结束时,由 driver 去触发 master 的清理资源操作,但是 master 进程已经挂掉了,所以也没关系。

2:当任务执行过程中,master 挂掉后,worker 和 executor 也异常了


可以看到这时候时没办法重启 exeuctor 的,此时 driver 那边就会看起来任务一直没进展了。

为了避免这种情况,master 可以做成无状态化,然后做主备容灾。当然 master 节点做的时候比较少,一般不容易崩溃,除非认为 kill 或者部署节点故障。


点击关注,第一时间了解华为云新鲜技术~​

发布于: 刚刚阅读数: 2
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
手绘流程图讲解spark是如何实现集群的高可用_spark_华为云开发者社区_InfoQ写作平台