Storm系列(六)架构分析之Scheduler-调度器[EventScheduler]
来源:互联网 发布:莆田涵江淘宝培训 编辑:程序博客网 时间:2024/05/29 03:37
任务调度接口定义:
1 IScheduler{ 2 // conf为当前nimbus的stormp配置 3 void prepare(Map conf); // 初始化 4 // topologyies表示集群中所有topology信息,cluster表示当前集群包括用户自定义调度逻辑事所需的所有资源(Supervisor、Solt、以及任务分配情况) 5 void schedule(Topologies topologies,Cluster cluster); 6 };
EventScheduler
实现流程图:
功能:对资源进行均匀分配的调度器,实现了IScheduler接口, schedule方法实现如下
1 defn– schedule[this ^Topologies topologyies ^Cluster cluster] 2 (schedule-topologies-evenly topologies cluster)
schedule-topologies-evenly方法原型:
1 defn schedule-topologies-evenly[^Topologies topologies ^Cluster cluster]
方法说明:
- 调用cluster对象的needsSchedulingTopology方法获取需要进行任务调度的Topology集合,判读依据:Topology设置的NumWorkers数目是否大于已经分配给该Topology的Worker数目,以及该Topology尚未分配的Executor数目是否大于0.
- 对需要进行任务调度的Topology获取其topology-id,然后调用schedule-topology方法获取到new-assignment(<executor,node+port>集合)。
- 用node和port信息构造WorkerSlot对象并将作为slot.
- 对Executor集合中的每一项构造ExecutorDetail对象,并返回一个ExecutorDetails集合。
- 调用cluster的assign方法将计算出来的slot分配给与该Topology相对应的executors.
schedule-topology
方法原型:
1 defn- schedule-topology [^TopologyDetails topology ~Cluster cluster]
方法说明:
- 调用cluster的getAvailableSlots方法获取当前集群可用的slot资源(集群中还没使用的Supervisor端口),并转换为<node,port>集合(available-slots).
- 将topology中的ExecutorDetails集合转换为<start-task-id,end-task-id>集合。
- 调用get-alive-assigned-node+port->executors方法获取当前topology已经分配的资源情况,返回<node+port,executors>集合(alive-assigned)。
- 获取当前topology可以使用的slot数目,topology设置的worker数目与当前available-slots数目加上alive-assigned数据二者的最小值(total-slots-to-use)。
- 对available-slots进行排序,计算需要分配的solt数目(total-slots-to-use减去alive-assigned),从排序后的solt中顺序获取需要分配的solt做为reassign-solts.
- 比较all-executors跟已分配的Executor集合间的差异,获取需要进行分配的Executor集合,做为reassign-executors.
- 将计算出来的reassign-solts与reassign-executor进行关联,转换为<executor,slot>映射集合(映射方式为:使executor均匀的分布在slot上),保存到ressignment中.
0 0
- Storm系列(六)架构分析之Scheduler-调度器[EventScheduler]
- Storm系列(七)架构分析之Scheduler-调度器[DefaultScheduler]
- JStorm与Storm源码分析(三)--Scheduler,调度器
- JStorm与Storm源码分析(三)--Scheduler,调度器
- Hadoop系列(5)之容量调度器Capacity Scheduler配置
- Storm-源码分析- Scheduler (backtype.storm.scheduler)
- Storm系列(五)架构分析之Nimbus启动过程
- Storm系列(十二)架构分析之Worker-心跳信息处理
- Storm系列(十三)架构分析之Worker-维护ZMQ连接
- Storm系列(十五)架构分析之Executor-Spout
- Storm系列(十六)架构分析之Executor-Bolt
- Cocos2d-X3.0 刨根问底(六)----- 调度器Scheduler类源码分析
- Cocos2d-X3.0 刨根问底(六)----- 调度器Scheduler类源码分析
- 调度器Scheduler类源码分析
- Cocos2d-x之调度器Scheduler
- Cocos2d-x 之调度器 Scheduler
- Hadoop学习之--Fair Scheduler作业调度分析
- OpenStack之Nova分析——Nova Scheduler调度算法
- Storm系列(三)Topology提交过程
- Storm系列(四)Topology提交校验过程
- 【python】获取本机局域网IP并发送邮件到指定邮箱
- 第二章 标准语法
- Storm系列(五)架构分析之Nimbus启动过程
- Storm系列(六)架构分析之Scheduler-调度器[EventScheduler]
- Storm系列(七)架构分析之Scheduler-调度器[DefaultScheduler]
- 中国计算机学会推荐国际学术会议和期刊目录——网络与信息安全
- Storm系列(九)架构分析之Supervisor-同步Nimbus的事件线程
- Esper系列(二)时间窗口、长度窗口、cast、注解、自定义函数、静态方法
- lucene多种查询方式
- eclipse中variable references non-existion resource可能原因及解决方案
- Storm系列(十)聚流示例
- Storm系列(十一)架构分析之Supervisor-管理Worker进程的事件线程