知识:
- 隔离计划程序,即在storm群集中运行多个拓扑的现成storm计划程序,使用静态元数据将资源分配给拓扑,其中要分配给每个拓扑的资源数量保持不变,并且在不重新启动群集的情况下无法更改。
- 组件的任务数量是在开发时预定义的,不能在运行时更改,而执行器和工作进程的数量可以通过名为“再平衡”的storm功能更改,该功能允许运行时从拓扑扩展到更多的执行器或工作进程
- 隔离调度器 需要分配给每个拓扑的机器数量需要在配置文件中配置为元数据,其中列出的拓扑将是“隔离的”,资源将优先分配给隔离的拓扑。
问题:
在多任务场景下,storm中的默认调度和隔离调度均没有对任务的优先级情况考虑,当集群中资源不足时可能会导致高优先级任务等待,并且使整个集群性能下降。
1.资源不够,有拓扑等待
2.资源充足,但是有节点挂掉了,导致性能下降。有些拓扑甚至不能运行。
解决方法: 提出了一个基于优先级的storm资源调度框架,即使没有足够的资源,也需要对拓扑进行分配,保证所有拓扑都可以运行。其次,根据优先级按比例分配slot。
优先级的资源调度框架有两个组件。第一个组件包含调度框架。第二个组件是优先级管理系统,它接收来自所有运行拓扑的优先级指示。每个拓扑必须实现一个接口,通过该接口将优先级指示分配给管理系统。资源调度器实现Storm IScheduler接口。
Algorithm 1: Priority Scheduling Algorithm |
1:if C == ∑ S (当集群资源满足最小资源时) 2: for each tp ∈ TP 3: Assign Si supervisor nodes to tp 4: Assign Ei executors among the worker slots of Si supervisor nodes 5: end for 6: end if 7: else 8 X = 0 9: for each j ∈ PR(所有拓扑优先级不一致) 10: for tpi''s in TP, total desired supervisor nodes ST =∑ n (所有拓扑需要的节点数总量) 11: fortpi''s in Mj, total desired supervisor nodes SP =∑ n (优先级j所需要的节点总量) 12: X = C - X(X为集群中的可用节点当ST等于X时满足资源分配) 13: compute proportional share of nodes PN = ((X) ∗ ) 14: for each tp ∈ Mj (当资源不满足所有时开始按比例缩减) 15: number of supervisor nodes to be allocated z = ∗ PN 16: Assign zsupervisor nodes to tp 17: Assign Ei executors among the worker slots of z supervisor nodes 18: X = X + z 19: end for 20: end for 21: end else |
算法:根据三种情况采取了分配方式
case1:当集群满足设定的最小分配时
case2:当集群满足全量的分配时
case3:当在两者之间时,按比例进行缩减资源。
疑问;最小所需要的woker数是根据什么设置,实际所需要的woker数又是根据什么设置。