Master HA源码解析

1、Master HA概述

Spark在生产上做HA一般采用的是通过zookeeper的方式,配置3个master的话是比较可靠的方式。采用zookeeper做HA的话zookeeper会保存整个Spark程序运行时候的元数据(包括Workers,Drivers,Applications,Executors等信息)。

采用zookeeper的数据保存方式,启动的时候会读取zookeeper中曾经保存的数据,这样再次启动的集群就是在上一次关闭集群的已有状态基础上继续已有的状态。

zookeeper本身提供的leader选举机制,具体工作的时候会有一个leader的一台机器,负责对外提供服务。提交程序的时候其实就是交给作为leader的master(activer级别的),其他作为follower,利用这个机制就要可以保证集群中多个master,只有一个是activer。当activer级别的出现故障的,作为standby的master就会被zookeeper通过自己的机制选举出来,由于zookeeper中保留了集群的信息(worker的信息,driver的信息,所有应用程序的信息),这些信息会被持久化到zookeeper中,所以在切换的过程中只会有一个影响就是只会影响新的job的提交。在粗粒度模式下,通过cluster Manage获取计算资源之后就和cluster Manage没有关系了,接下来的是driver和executor的交互,所以master挂掉并不影响实际的运行。

 

2、Master HA的四种方式

Master HA的四种方式:zookeeper,fileSystem(对实时性要求不高可用),custom(自定义),none。

master启动的时候会根据具体的RECOVERY_MODE选择具体不同的HA和元数据持久化恢复的方式

在master的onStart方法中有如下代码

这里的RECOVERY_MODE就是从配置中获取的信息,然后进行模式匹配,这里有4中不同的case。ZOOKEEPER的方式是new ZookeeperRecoveryModeFactory,是StandaloneRecoveryModeFactory的子类如果客户需要自动以就继承这个类并重写createPersistenceEngine(这个是数据持久化的引擎)和createLeaderElectionAgent方法(这个是leader选举的代理)。

数据持久化引擎关系到怎么具体持久化drivers,applications,workers,executors的信息;而leader选举的代理涉及到我们,在当activer级别的master出故障的时候怎么从standby模式中选取出一个leader,进一步进行数据恢复。

在PersistenceEngine中有一个至关重要的方法persist来实现数据持久化。

fileSystem和None的方式MonarchyLeaderAgent选举,实现方法就是将直接传入的master设置为leader

3、Master HA基于Zookeeper的工作机制

zookeeper做HA的机制。首先从zookeeper的方式讲,zookeeper会自动的实现master切换,所以在这个切换过程中是:

(1)Zookeeper自动选举出作为leader的Master后;

(2)使用zookeeper持久化引擎ZookeeperPersistenceEngine去读取我们集群的状态数据:drivers,applications,workers,还有具体的executors等信息;

(3)下一步就是判断元数据信息是否有空的内容;

(4)然后将持久化获得的drivers,applications,workers,executors等信息重新进行注册,放到作为leader的master的内存中缓存起来;

(5)有这些信息了,肯定要确认一下这些信息是否和现在集群中你的信息是否是一致的,所以这时候会把applications,drivers等的信息变成unkown方式,然后向application所对应的driver以及worker发送从Standby的master变成leader的地址信息;

(6)地址信息发过去后,driver,worker正常运行的话就会接收到地址信息,返回响应给master;

(7)转过来master接收到来自drivers和workers的响应信息后会使用一个关键的方法:completeRecovery来对没有响应的applications(driver)和workers(executor)进行处理,处理之后master的State会合并,RecoveryState.ALIVE从而开始可以对外提供服务;

(8)此时Master调用自己的Scheduler方法对正在进行等待的Applications和Drivers进行资源调度。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DNS坑爹呢?!

昨天下午3点多,大量网民反映无法上网。多家DNS服务商通过微博透露,在1月21日下午3点20分左右,全国所有通用顶级域的根出现异常,导致部分国内网民无法访问.com域名网站,对中国互联网造成严重影响。 昨天下午有事出去&am…

数据结构顺序表基本流程

生活中很多事物是有顺序关系的,如班级座位从前到后是按排的顺序,从左到右是按列的顺序,可以很方便的定位到某一个位置,但如果座位是散乱的,就很难定位。 在程序中,经常需要将一组(通常是同为某…

Spark2.x RPC解析

1、概述 在Spark中很多地方都涉及网络通信,比如Spark各个组件间的消息互通、用户文件与Jar包的上传、节点间的Shuffle过程、Block数据的复制与备份等。Spark 2.0 之后,master 和worker 之间完全不使用akka 通信,改用netty实现。因为使用Akka…

LeetCode 1629. 按键持续时间最长的键

文章目录1. 题目2. 解题1. 题目 LeetCode 设计了一款新式键盘,正在测试其可用性。测试人员将会点击一系列键(总计 n 个),每次一个。 给你一个长度为 n 的字符串 keysPressed ,其中 keysPressed[i] 表示测试序列中第 …

数据结构中的栈

整理衣服时,先放冬天的衣服,后放夏天的衣服,这样夏天的衣服就在上面,方便夏季取用。 栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素&…

数据结构中的队列

生活中很多时候需要排队来维持秩序,如等公交、取票、办理银行业务等。 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出的(First In First Out)的线性表&am…

SparkContext解析

1、SparkContext概述 Spark的程序编写是基于SparkContext的,体现在2方面:①Spark编程的核心基础(RDD),第一个RDD是由SparkContext创建的;②Spark程序的调度优化也是基于SparkContext,RDD在一开…

LeetCode 1630. 等差子数组

文章目录1. 题目2. 解题1. 题目 如果一个数列由至少两个元素组成,且每两个连续元素之间的差值都相同,那么这个序列就是 等差数列 。更正式地,数列 s 是等差数列,只需要满足:对于每个有效的 i , s[i1] - s[…

LeetCode 1631. 最小体力消耗路径(DFS + 二分查找)

文章目录1. 题目2. 解题1. 题目 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。 一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) &…

Spark资源调度分配

1、任务调度与资源调度 任务调度:是指通过DAGScheduler,TaskScheduler,SchedulerBackend等进行的作业调度。 资源调度:是指应用程序获取资源。 任务调度是在资源调度的基础上,没有资源调度,那么任务调度…

两个栈实现队列与两个队列实现栈

1. 两个栈实现队列 实现一 思路 s1是入栈的,s2是出栈的。 入队列,直接压到s1是就行了出队列,先把s1中的元素全部出栈压入到s2中,弹出s2中的栈顶元素;再把s2的所有元素全部压回s1中 实现二 思路 s1是入栈的&#xff0c…

ACwing 5. 多重背包问题 II(二进制拆分+DP)

文章目录1. 题目2. 解题1. 题目 有 N 种物品和一个容量是 V 的背包。 第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。 输出最大价值。 输入格式…

排序:冒泡排序与选择排序

冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该…

Spark Master的注册机制与状态管理

目录 1、Master接收注册的主要对象 2、Master接收Worker的注册 3、Master接收Driver的注册 4、Master处理Driver状态变化 5、Master接收Application的注册 6、Master处理Executor状态变化 1、Master接收注册的主要对象 Master主要接受注册的对象是:Applicatio…

排序:插入排序与希尔排序

插入排序 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从…

jieba分词提取小说人名

文章目录1. 读入文本2. 分词3. 计数4. 排序5. 添加用户字典以《神雕侠侣》为例: 使用 jieba.posseg获取词性,人名的词性为 nr 1. 读入文本 import jieba.posseg as psg with open(shendiaoxialv.txt,encodingutf-8) as f:text f.readlines()print(te…

Spark Worker源码

目录 1、概述 2、LaunchDriver 3、LaunchDriver 4、总结 1、概述 worker肯定是实现RPC通信的,否则别人没法给你发消息。他继承的是ThreadSafeRpcEndpoint,ThreadSafeRpcEndpoint是线程安全的,意味着处理一条消息完成后再处理下一个消息。换…

排序:快速排序与归并排序

快速排序 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都…

LeetCode 764. 最大加号标志(DP)

文章目录1. 题目2. 解题1. 题目 在一个大小在 (0, 0) 到 (N-1, N-1) 的2D网格 grid 中,除了在 mines 中给出的单元为 0,其他每个单元都是 1。网格中包含 1 的最大的轴对齐加号标志是多少阶?返回加号标志的阶数。如果未找到加号标志&#xff…

机器学习基础—Kaggle泰坦尼克预测(完整分析)

1.引言 我们先找个简单的实际例子,来看看,所谓的数据挖掘或者机器学习实际应用到底是怎么样一个过程。 2.背景 2.1 关于Kaggle Kaggle是一个数据分析建模的应用竞赛平台,有点类似KDD-CUP(国际知识发现和数据挖掘竞赛)&…