Storm系列(七)架构分析之Scheduler-调度器[DefaultScheduler]
来源:互联网 发布:莆田涵江淘宝培训 编辑:程序博客网 时间:2024/06/08 13:16
Storm默认的任务调度器。实现如下:
1 (defn –prepare [this conf]) 2 (defn –schedule [this ^Topologies topologies ^Cluster cluster] 3 (default-schedule topologies cluster))
default-schedule
方法原型:
1 (defn default-schedule [^Topologies topologies ^Cluster cluster])
方法说明:
- 调用cluster对象的needsSchedulingTopology方法获取需要进行任务调度的Topology集合.
- 调用cluster的getAvailableSlots方法获取当前集群可用的slot资源(集群中还没使用的Supervisor端口),并转换为<node,port>集合(available-slots).
- 将topology中的ExecutorDetails集合转换为<start-task-id,end-task-id>集合存入all-executors.
- 调用get-alive-assigned-node+port->executors方法获取当前topology已经分配的资源情况,返回<node+port,executors>集合(alive-assigned).
- 调用slots-can-ressign方法对alive-assigned的slot信息进行判断,选择其中可被重新分配的slot集合并保存到can-ressign-slots变量中。
- 计算当前Topology所能使用的全部slot的数目,topology设置的worker数目与当前available-slots数目加上can-ressign-slots数据二者的最小值(total-slots-to-use)。
- 判断total-slots-to-use的数目是否大于当前已分配的slot数目(alive-assigned),若大于则调用bad-slots方法计算所有可能被释放的slot.
- 调用cluster的freeSlots方法释放前面计算出来的bad-slots。
- 调用EventScheduler的schedule-topologies-evenly方法将系统中的资源均匀分配该Topology.
调度流程图:
slots-can-reassign
功能:从已经分配给当前Topology的资源中过滤出可以继续使用的资源。
函数原型:
1 (defn slots-can-reassign [^Cluster cluster slots])
方法说明:
- 参数slots为已分配的slots资源,<node,port>集合。
- 对传入的slots进行过滤,过滤方式:选判断slots的node信息是否存在于集群的黑名单中,如果不在,继续判断slot的port是否在与node相对应的Supervisor的所有可用端口列表中,如果在该slots就可以继续使用。
bad-slots
功能:计算一个Topology已经分配的资源中哪些是不再需要的。
函数原型:
1 (defn- bad-slots [existing-slots num-executors num-workers])
参数说明:
Existing-slots:已分配给Topology的资源,<[node,port],executors>集合。
Num-executors:Topology的所有Executor(包括已分配和未分配的)。
Num-workers:Topology可使用的全部slot数目。
方法说明:
- 判断num-workers是否为0,如果是表示当前没有可供该Topology使用的slots并返回空集合。
- 定义distribution、keepers集合,调用integer-divided方法将num-executors均匀地分配到num-worksers中结果集保存到distribution集合中,结果集格式<executor-count,worker-count>, executor-count表示单个worker被分配Executor的个数,worker-count表示有多少个这样的worker,keepers集合默认为空.
- 对existing-slots中的每一项计算executor-count,然后根据distribution集合,及该executor-count为键获取值,若所获取值大于0,意味着存在这样的分配,这时将该<[node,port],executors>信息放入keepers中,同时将distribution中该executor-count的对应值减一。
- 从existing-slots中移除keepers中记录的需要继续维持的分配情况,若移除完之后还存在slot信息,则表明这些slot可以被释放,并将其转换为workerslot对象集合返回。
0 0
- Storm系列(七)架构分析之Scheduler-调度器[DefaultScheduler]
- Storm系列(六)架构分析之Scheduler-调度器[EventScheduler]
- 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
- 调度器Scheduler类源码分析
- Cocos2d-x之调度器Scheduler
- Cocos2d-x 之调度器 Scheduler
- Hadoop学习之--Fair Scheduler作业调度分析
- OpenStack之Nova分析——Nova Scheduler调度算法
- 调度器(scheduler)
- 调度器 Scheduler
- 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进程的事件线程
- Storm系列(十二)架构分析之Worker-心跳信息处理