[Spark内核] 第29课:Master HA彻底解密
2024-08-21 07:27:33
本课主题
- Master HA 解析
- Master HA 解析源码分享
[引言部份:你希望读者看完这篇博客后有那些启发、学到什么样的知识点]
更新中......
Master HA 解析
- 生产环境下一般采用 ZooKeeper 做 HA,且建义为 3台 Master, ZooKeeper 会自动管理 Master 的切换
- 采用 ZooKeeper 做 HA 的时候,ZooKeeper 会负责保存整个 Spark 集群运行的元数据:所有 Worker 的信息, 所有 Driver 的信息, 应用程序的信息 和 所有Executor 的信息
- ZooKeeper 遇到当前Active 级别的Master 出现故障的时候从Standby Masters 中选取出一台作为Active , 但是要注意,被选举后到成为真正的Active Master 之间需要从ZooKeeper 中获取集群当前运行状态的元数据信息并进行恢复;
- 在 Master 切换的过程中,所有已经在运行的程序皆正常运行!因为 Spark Application 在运行前就已经通过 Cluster Manager 获得了计算资源 所以在运行时 Job 本身的调度和处理和 Master 是没有任何关系的!
- 在Master 的切换过程中唯一的影响是不能提交新的Job: 一方面不能提交新的应用程序给集群,因为只有Active Master 才能接受新的程序的提交请求;另外一方面,已经运行的程序也不能够因为Action 操作触发新的Job 的提交请求。
Spark Master HA on ZooKeeper 切換流程圖
Master HA 的四大方式
- Master HA 的四大方式:分別是 ZOOKEEPER,FILESYSTEM, CUSTOM, NONE;
- 需要说明的是:
- ZOOKEEPER 是自動管理 Master;
- FILESYSTEM 的方式在 Master 出现突障后需要手动启动机器,机器启动后会立即成为 Active 级别的 Master 来对外提供服务(接受应用程序提交的请求、接受新的 Job 运行的请求)
- CUSTOM 的方式允许用户自定义 Master HA 的实现,这对于高级用户特别有用;
- NONE,这是默应情况,当我们下载安装了 Spark 集群中就是采用这种方式,该方式不会持久化集群的数据, Driver, Application, Worker and Executor. Master 启动起立即管理集群;
- Persistence Engine 中有一个至关重要的方法 persists 来实现数据持久化
readPersistedData 来获取恢复集群中的元数据
现在去看看它的createdLeaderElectionAgent的方法 - FILESYSTEM 和 NONE 的方式均是采用 MonarchyLeaderAgent 的方式来完成 Leader的选举的,其实际实现是直接把传入的 Master 作为 Leader
- NONE 的方式根本不需要持久化引擎,它为什么要搞一个BlackHoleEngine
- 对一些WorkerState状态为UNKNOWN 的话(Worker不响应),就把它删除掉,如果你是以集群方式运行的话,driver 失败话可以重新启动一下,最后把状态变回ALIVE,这里注意要加入--supervise这一个参数。
[总结部份]
更新中......
參考資料
资料来源来至 DT大数据梦工厂 大数据传奇行动 第29课:Master HA彻底解密
Spark源码图片取自于 Spark 1.6.0版本
最新文章
- ENode 1.0 - Saga的思想与实现
- 看来System.dll是没法剔除依赖了
- XMPP框架下微信项目总结(2)授权登陆/注销/注册/打印日志
- NSString(或者说是UILabel)加入 “行间距” 之后的 “高度”计算
- SQLServer2008新建链接服务器for Oracle
- Teamwork-Week3 职责划分及团队分数分配原则
- Introducing RecyclerView(一)
- 【转】(DT系列六)devicetree中数据和 struct device有什么关系
- 子查询有OR无法展开,改写成union
- SQL Server 中@@IDENTITY的用法
- C#中linq报“Character literal must contain exactly one character”的错误提示
- 设计模式 -- 责任链模式或者叫职责链模式(Chain of Responsibility(CoR))
- 爬虫初探--PHP
- AngularJS 作用域(Scope)
- range和xrange的区别
- drone的pipeline原理与代码分析
- input.file样式修改
- Newtonsoft.Json 序列化小写首字母
- VS 最近打开清理bat
- 使用nginx+docker配置https负载均衡
热门文章
- 安装phpnow服务[Apache_pn]提示失败的解决方法
- NS3网络仿真(10): 解析以太网帧
- Principle of Computing (Python)学习笔记(7) DFS Search + Tic Tac Toe use MiniMax Stratedy
- BIRT实现组内跨行计算
- 002Java概述
- junit初探
- css自动添加浏览器兼容前缀 autoprefixer设置
- 解决win7中防火墙的0x6D9问题的方法
- The Movie db (TMDB)的API申请
- ABP-Module