Master深度剖析
来源:互联网 发布:历史的巧合 知乎 编辑:程序博客网 时间:2024/06/09 18:50
一. Master注册机制
driver启动后,执行application代码,sparkcontext初始化时,底层的sparkdeployschedulerbackend,通过appclient的内部现场clientactor发送registerapplication到Master注册application
将application,driver,最新的可用的worker信息分别加入相应缓存(HashMap),加入相应的队列,进行持久化,然后调用schedule()方法进行资源调度,work启动后反向注册。
入口:org.apache.Spark.deploy.master文件下的receiveWithLogging方法中的case RegisterApplication(注册Application)、case RegisterWorker(注册Worker)、case RequestSubmitDriver(注册Driver).
二. Master状态改变机制(再看一遍)
driver状态改变
若状态为ERROR,FINISHED,FAILED时调用 removeDriver方法移除Driver。
removeDriver步骤如下:
根据driverId找到driver
清除内存中的driver
将driver加入completedDrivers
去掉该driver的持久化信息
设置driver的状态信息
在driver所在的worker中移除driver
调用schedule()对资源重新调度
Executor状态改变
通过appId找到applicationInfo,再根据execId从applicationInfo中获取ExecutorDesc信息
设置ExecutorDesc的当前状态
向ExecutorDesc对应的driver发送ExecutorUpdated信息
如果executor已经执行完毕,先从appInfo中移除Executor,再从executorDesc的worker中移除executorDesc信息
如果executor为非正常退出,且还未到达重试调度上线,将重试调度直到成功或者达到上限,否则将移除改Application并将状态设置为FAILED
入口:org.apache.spark.deploy.master文件下的receiveWithLogging方法中的DriverStateChanged(Driver状态改变处理)、ExecutorStateChanged(Executor状态改变处理)。
三. master资源调度算法
scheduler()方法,每次有新的应用提交或者集群 资源状况发生变化时(executor增加)调用scheduler()
master状态为ALIVE才进行资源调度,如果不是ALIVE会直接返回。
首先会使用Random.shuffle将master保留的worker信息随机打乱,以实现负载均衡。将worker存入ArrayBuffer,n从最后一个元素到索引为3,k为0到n-1的随机数,交换n和k中存的worker信息,执行结束时,worker顺序被完全打乱了。
spark默认启动executor的方式是FIFO,也就是说每个提交的应用程序都放在调度的等待队列中,先进先出。
- Master深度剖析
- Spark内核源码深度剖析:Master主备切换机制原理剖析与源码分析
- Spark内核源码深度剖析:Master注册机制原理剖析与源码分析
- 空指针深度剖析
- 空指针深度剖析
- 以太网深度剖析
- "长尾"深度剖析
- 深度剖析“考研现象”
- 深度剖析:具名常量
- 深度剖析云存储
- 深度剖析云存储
- #ifdef __cplusplus深度剖析
- libevent源码深度剖析
- Linux0.00深度剖析
- 深度剖析搜索引擎
- C语言深度剖析
- libevent源码深度剖析
- libevent源码深度剖析
- 设计更好的表格
- Maven下SpringMVC简单例子
- hdoj 1686 Oulipo
- 发送有序广播
- select实现并发服务器
- Master深度剖析
- java.lang.NullPointerException: Attempt to get length of null array的解决方法
- 记负均正
- bzoj 2337: [HNOI2011]XOR和路径 期望dp+高斯消元
- jad.exe在windows下反汇编DOS的界面实现
- cocos2d-x 3.15.1 Win10 tolua++环境配置以及遇到的坑
- Java开发之@PostConstruct和@PreConstruct注解
- 软件工程(C编码实践篇)学习总结
- 如何在java中用“*”做出三角形