分享

什么情况下会出现bad slots

louiscool2 发表于 2016-7-31 09:35:14 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 9941
defaultScheduler会在为topology分配任务之前释放掉其他topology不再需要的资源,即bad slots,哪位大神能否讲什么情况下会出现topology多余占用的资源,bad slots这种情况?

已有(3)人评论

跳转到指定楼层
easthome001 发表于 2016-7-31 13:37:12
本帖最后由 easthome001 于 2016-7-31 13:41 编辑

楼主可参考下面

其实答案楼主已经有了
defaultScheduler会在为topology分配任务之前释放掉其他topology不再需要的资源,即bad slots
具体如何识别bad-slots:可以通过下面函数



bad-slots:
功能:计算一个Topology已经分配的资源中哪些是不再需要的。

函数原型:


[mw_shl_code=bash,true](defn- bad-slots [existing-slots num-executors num-workers])
[/mw_shl_code]


参数说明:
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对象集合返回。






回复

使用道具 举报

louiscool2 发表于 2016-7-31 19:20:11
这个我看到过,我是想知道什么场景下会出现bad slots
回复

使用道具 举报

sstutu 发表于 2016-8-2 14:17:52
louiscool2 发表于 2016-7-31 19:20
这个我看到过,我是想知道什么场景下会出现bad slots

这个问题,其实已经隐含在了函数中。
什么情况下产生bad slots

楼主问题的是什么场景下,其实是什么情况下会出现bad slots。
对于storm的运行中,我们需要更加合理利用内存。因此在运行中,就需要把一些可以利用的资料腾一下空间。
就比如我们房间放东西,在想放的时候,我们想腾出更大的空间,所以把一些没用的东西要么扔了,要么挪挪。
对于bad slots也是同样的道理。
bad slots就是要扔掉的东西。
也就是说在什么情况下会出现bad slots,什么情况下会搜集判断。
在运行拓扑的时候,我们就要搜集bad slots。
但是在未运行拓扑之前其实可能就已经产生了bad slots。

如何产生和查找bad slots
那么他是如何产生的
我们就需要在他的判断条件中查找
判断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对象集合返回。

上面信息,楼主需要仔细阅读和琢磨,其实就是在找已经分配的资源,也就是非bad slots。非bad slots找到了,那么剩下的就是bad slots了。所以这样就完成了  bad slots的寻找。






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条