Storm杂谈之调度算法
来源:互联网 发布:电子书离线软件 编辑:程序博客网 时间:2024/06/05 05:36
前言
scheduler是storm的调度器,它负责为Topology分配当前的集群可用资源,目前storm提供了3中调度器
- EvenScheduler:会将系统中的资源均匀的分配给当前需要任务分配的多个Topology
- DefaultScheduler:跟EvenScheduler基本一致,只是分配前,先释放其他Topology不需要的资源,然后调用EvenScheduler
- IsolationScheduler:可以单独为某些Topology指定它们需要的机器资源,详情参考 storm的新利器Pluggable Schedule
EvenScheduler
本文主要就EvenScheduler做例子介绍,相信读者就这个例子就可以知道EvenScheduler的原理了
假设当前集群有3台机器,A,B, C,每个机器有3个port,如下图:
那么,当有新的Topology提交的时候,就会分配资源,这时,在获取集群可用资源后会先sort一下,代码如下:
(defn sort-slots [all-slots] (let [split-up (sort-by count > (vals (group-by first all-slots)))] (apply interleave-all split-up) ))
; this can be rewritten to be tail recursive(defn interleave-all [& colls] (if (empty? colls) [] (let [colls (filter (complement empty?) colls) my-elems (map first colls) rest-elems (apply interleave-all (map rest colls))] (concat my-elems rest-elems))))
这段代码很关键,因为每次sort完之后,就会按顺序取slot分配给需要的Topology
现在有两个Topology,T1,T2, T1需要2个slot,T2需要4个slot。
1、T1提交时,会用掉前两个slot [A,1],[B,1],如下图,
2、T2提交时,这时集群可用资源为 [A,2],[B,2],[C,1],[A,3],[B,3],[C,2],[C,3](排序之后的顺序),则T2会占用 [A,2],[B,2],[C,1],[A,3],如下图:
A全部被占用,而C却只被占用了一个。由此可见,Storm现有的Scheduler会导致集群资源分配不均匀情况,而且也没有考虑worker之间的通信负载情况。
Adaptive Online Scheduling in Storm 是13年发表的论文,对storm的Scheduler的改进,详细大家看论文,这里就不做详细介绍了,论文里的scheduler,论文作者已实现,可以论文上有地址,或者e-mail我(joey.wen@outlook.com),可以把源码打包发你.
PS,360公司的大牛也对storm自身的scheduler进行了更改,见参考5 基于Storm利用空闲资源构建实时计算平台
如有讲错的地方,欢迎留言指正
转载请注明出处,谢谢
Reference
1、storm源码分析 (第7章)
2、storm的新利器Pluggable Schedule
3、http://www.dis.uniroma1.it/~midlab/articoli/ABQ13storm.pdf
4、http://www.orgs.ttu.edu/debs2013/presentations/DEBS13-Paper88-Querzoni.pdf
5、基于Storm利用空闲资源构建实时计算平台
0 0
- Storm杂谈之调度算法
- Storm之定时调度
- Storm杂谈之Acker拾趣
- Storm调度
- Storm杂谈之Topology的启动过程(一)
- Storm杂谈之Topology的启动过程(二)
- 操作系统之调度算法
- 关于Storm与JStorm的调度算法的讨论
- 关于Storm与JStorm的调度算法的讨论
- Storm系列(六)架构分析之Scheduler-调度器[EventScheduler]
- Storm系列(七)架构分析之Scheduler-调度器[DefaultScheduler]
- Storm-隔离调度器
- Storm的调度器
- 进程调度算法之Makefile
- 算法导论之装配线调度
- 计算机操作系统之调度算法
- 操作系统之磁盘调度算法
- 进程调度算法之FCFS
- 单板吉他,音质还可以
- java真难啊
- TCP和UDP的区别(转)
- 猜数游戏
- 【DirecX 教程】Lesson 4: 窗口大小和客户区大小
- Storm杂谈之调度算法
- Java和Flex整合报错(五)
- 一份简要游戏服务器缺陷、瓶颈分析报告
- 《网蜂A8实战演练》——11.Linux 电容式触摸屏驱动
- 黑马程序员————java基础--------java语法基础之运算符、关键字等
- 同人饿
- hdu 2035 人见人爱A^B
- HDU 1431 素数回文(回文素数)
- Android中Intent传递对象(Serializable,Parcelable)