热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Spark详解(八):Spark容错以及高可用性HA

所谓容错就是一个系统的部分出现错误的情况还能够持续地提供服务,不会因为一些错误而导致系统性能严重下降或出现系统瘫痪。在一个集群中出现机器故障、网络问题等常态ÿ

所谓容错就是一个系统的部分出现错误的情况还能够持续地提供服务,不会因为一些错误而导致系统性能严重下降或出现系统瘫痪。在一个集群中出现机器故障、网络问题等常态,尤其集群达到较大规模后,很可能较频繁的出现机器故障等不能进行提供服务,因此分布性集群需要进行容错设计。


1. Executor容错

Spark支持多种运行模式,这些运行模型中的集群管理器会为任务分配运行资源,在运行资源中启动Executor,由Executor执行任务的运行,最终把任务运行状态发送给Driver。

在这里插入图片描述

(1)首先看Exeucutord的启动过程:在集群中由Master给应用程序分配运行资源后,然后再Worker中启动ExecutorRunner,而ExecutorRunner根据当前的运行模式启动CoarseGrainedExecutorBackend进程,当该进程会向Driver发送注册Executor信息,如果注册成功,则CoarseGrainedExecutorBackend在其内部启动Executor。Executor由ExecutorRunner进行管理,当Executor出现异常的时候(如所运行容器CoarseGrainedExecutorBackend进程异常退出等)由ExecutorRunner捕获当前异常并且发送ExecutorStateChanged消息给Worker进程。
(2)Worker进程接受到ExecutorStateChanged消息时,在Worker的handleExecutorStateChanged方法中,根据Executor状态消息更新,同时把Executor状态发送给Master。
(3)Master接收到Executor状态变化消息后,如果发现Executor出现异常退出,则调用Master.schedule方法,尝试获取可用的Worker节点并启动Executor,而这个Worker很可能不是失败之前运行的Executor的Worker节点。该尝试系统会进行10次,如果超过10次,则标记该应用运行失败并移除集群中该应用。


2. Worker异常

Spark独立运行模式采用的是Master/Slave的结构,其中Slave是由Worker来担任的,在运行的时候会发送心跳信息给Master,让Master知道Worker的实时状态,另一方面也会检测注册的Worker是否超时,因为在集群运行过程中,可能由于机器宕机或者进程被杀死等原因造成Worker进程异常退出

在这里插入图片描述

当Worker出现超时时,Master调用timeOutDeadWorker方法进行处理,在处理时根据Worker运行的是Executor和Driver进行分别处理。


  • 如果是Executor,Master先把该Worker上运行的Executor发送消息ExecutorUpdate给对应的Driver,告知Exeucotr已经丢失,同时把这些Executor从其应用程序中删除。
  • 如果是Drvier,则判断是否要重新启动。如果需要,则调用Master.schedule方法进行调度,分配合适节点重启Driver。

3. Master异常

Master作为Spark独立运行模式的核心,如果Master出现异常,则整个集群的运行资源将无法进行管理,整个集群将处于“群龙无首”的状态。很幸运的是,Spark在设计的时候考虑这个情况,在集群运行的时候,Master将启动一个或者多个StandBy Mster,当Master异常的时候,StandBy Mster将根据一定的规则确定其中一个为Master接管。

xxx


推荐阅读
  • 深入解析Java并发之ArrayBlockingQueue
    本文详细探讨了ArrayBlockingQueue,这是一种基于数组实现的阻塞队列。ArrayBlockingQueue在初始化时需要指定容量,因此它是一个有界的阻塞队列。文章不仅介绍了其基本概念和数据结构,还深入分析了其源码实现,包括各种入队、出队、获取元素和删除元素的方法。 ... [详细]
  • This article explores the process of integrating Promises into Ext Ajax calls for a more functional programming approach, along with detailed steps on testing these asynchronous operations. ... [详细]
  • 在AngularJS中,有时需要在表单内包含某些控件,但又不希望这些控件导致表单变为脏状态。例如,当用户对表单进行修改后,表单的$dirty属性将变为true,触发保存对话框。然而,对于一些导航或辅助功能控件,我们可能并不希望它们触发这种行为。 ... [详细]
  • 在CentOS 7中部署Nginx并配置SSL证书
    本文详细介绍了如何在CentOS 7操作系统上安装Nginx服务器,并配置SSL证书以增强网站的安全性。适合初学者和中级用户参考。 ... [详细]
  • 本文介绍了如何通过安装和配置php_uploadprogress扩展来实现文件上传时的进度条显示功能。通过一个简单的示例,详细解释了从安装扩展到编写具体代码的全过程。 ... [详细]
  • 本文探讨了当通过Nginx访问网站时出现504 Gateway Timeout错误的解决方案,特别是当请求处理时间超过30秒时的情况。文章提供了调整PHP-FPM配置的具体步骤,以延长请求超时时间。 ... [详细]
  • 本文详细介绍了MySQL InnoDB存储引擎中的Redo Log和Undo Log,探讨了它们的工作原理、存储方式及其在事务处理中的关键作用。 ... [详细]
  • 知识图谱与图神经网络在金融科技中的应用探讨
    本文详细介绍了融慧金科AI Lab负责人张凯博士在2020爱分析·中国人工智能高峰论坛上的演讲,探讨了知识图谱与图神经网络模型如何在金融科技领域发挥重要作用。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 本文介绍如何在阿里云环境中利用 Docker 容器化技术部署一个简单的 Flask Web 应用,并确保其可通过互联网访问。内容涵盖 Python 代码编写、Dockerfile 配置、镜像构建及容器运行等步骤。 ... [详细]
  • 深入理解Dockerfile及其作用
    Dockerfile是一种文本格式的配置文件,用于定义构建Docker镜像所需的步骤。通过使用`docker build`命令,用户可以将Dockerfile中的一系列指令转换成一个可执行的Docker镜像。 ... [详细]
  • 2017年软件开发领域的七大变革
    随着技术的不断进步,2017年对软件开发人员而言将充满挑战与机遇。本文探讨了开发人员需要适应的七个关键变化,包括人工智能、聊天机器人、容器技术、应用程序版本控制、云测试环境、大众开发者崛起以及系统管理的云迁移。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
author-avatar
我还是看好小棠呀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有