本帖最后由 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对象集合返回。
|