码迷,mamicode.com
首页 > 编程语言 > 详细

Storm杂谈之调度算法

时间:2014-12-28 00:32:11      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:storm   分布式处理   算法   分布式   

前言

scheduler是storm的调度器,它负责为Topology分配当前的集群可用资源,目前storm提供了3中调度器
  1. EvenScheduler:会将系统中的资源均匀的分配给当前需要任务分配的多个Topology
  2. DefaultScheduler:跟EvenScheduler基本一致,只是分配前,先释放其他Topology不需要的资源,然后调用EvenScheduler
  3. 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))))



由此可见,3台机器sort之后的排序为[A,1],[B,1],[C,1],[A,2],[B,2],[C,2],[A,3],[B,3],[C,3]

现在有两个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],如下图:

技术分享

由此可见,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章)
3、http://www.dis.uniroma1.it/~midlab/articoli/ABQ13storm.pdf
4、http://www.orgs.ttu.edu/debs2013/presentations/DEBS13-Paper88-Querzoni.pdf

Storm杂谈之调度算法

标签:storm   分布式处理   算法   分布式   

原文地址:http://blog.csdn.net/wzhg0508/article/details/41173223

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!