<续>调度算法补充
cpmpute->executors:
- 1.从storm配置获取<compoent-id,parallelism>集合
- 2.storm-task-info 得到<task-id, compoent-id>集合
- 3.将集合处理为 [compoent-id, tasks]
- 4.将<compoent-id,parallelism>和<compoent-id,tasks> join获得<compoent-id,[parallelism,tasks]>
- 5.根据[parallelism,tasks]将task均分到数目为parallelism的分区,返回每一个parallelism的[task-1,task-2,...]
- 6.将返回的转换为executor集合[start-task-id,end-task-id]
get-alive-assigned-node+port -> executors:
- 1.得到当前topology的assignment
- 2.如不为空,则得到其中的<executors,slot>
- 3.转化为[executors,[node,port]]
- 4.再次转化为<[node,port],executors>
- 5.返回结果
sort-slots:
- 1.将全部可用的slots做为参数传入
- 2.根据supervisor-id进行分组排序
- 3.调用intervel-all方法对分组排序后的结果结合colls进行处理
1
colls不为空,则调用map first方法对集合处理:遍历colls,取每一个supervisor的第一条记录,加入到my-elments中。
2
递归调用interval-all处理剩下的集合。
参见下图:
node
bad-slots:
- 1.参数须要:此topology已经分配的资源existing-slots、此topology的全部
的executor、此topology可以使用的slot数目
- 2.根据executer数和可以使用的slot数计算出一个<executor-count,slot-count>,executor-count表示一个slot里面的executor数目,slot-count表示这样的slot有多少个。好比 10个executor ,4个slot可能的计算结果为<2,2>,<3,2>
- 3.再根据传入的existing-slots中的每一项计算其executor-count
- 把计算获得的executor-count做为键去集合<executor-count,slot-count>里面取,若是找到的值大于0,说明存在这样的分配,保持这样的分配,将其加入到keeps中,对应的slot-count的值减一,继续下一个计算
- 4.遍历完existing-slots集合后,可能会未加入keeps集合的元素,此时这些就是能够被释放的资源。具体作法就是:existing-slots和keeps作差值,剩下的,就能够释放。做为结果返回。
欢迎关注本站公众号,获取更多信息