调度细则
任务调度算法以worker为维度;
调度过程中正在进行的调度动作不会对已发生的调度动作产生影响;
调度过程中用户可以自定义 useDefined Assignment,和使用已有的old Assignment,这两者的优先级是:useDefined Assignment>old Assignment;
,强制要求同组件的task分布到不同supervisor上;
默认调度算法:
1、以worker为维度,尽量将worker平均分配到各个supervisor上;
2、以worker为单位,确认worker与task数目大致的对应关系(注意在这之前已经其他拓扑占用利用的worker不再参与本次动作);
3、建立task-worker关系的优先级依次为:尽量避免同类task在同一work和supervisor下的情况,尽量保证task在worker和supervisor基准上平均分配,尽量保证有直接信息流传输的task在同一worker下;
2 Worker资源足够,测试调度分配是否合理
常规测试一
配置:=false,topology_nums=1, topology_level=1, workers=6,
=6, =6, =6;
每台机子canused_slot=16
测试目标(当每台机子端口一致时,work平均分配,同类task尽量分开,且task尽量均匀分布于work和supervisor)
S_x 代表spout-task, B_x_x 代表第x个bolt-task,A_x 代表acker-task
Supervisor
1
2
3
4
5
6
Work1
spout-task
1
1
1
1
1
1
Bolt0-task
1
1
1
1
1
1
acker-task
1
1
1
1
1
1
测试结果:
Worker被一一分配到supervisor上
Task按规定分配到work上去:
合理
常规测试二
配置:=false,topology_nums=1, topology_level=1, workers=24,
=10, =18, =12;
机1端口数量=4、机1端口数量=4、机1端口数量=4、机1端口数量=4、
机1端口数量=4、机1端口数量=4
测试目标
①以worker为维度,尽量将worker平均分配到各个supervisor上;
②保证同类型task尽量均分到不同worker和supervisor的基础上,其次保证每一个worker和supervisor的task数量均衡,最后保证直接相关的task放到一个进程上去;
测试结果:
Worker被一一分配到supervisor上
Task按规定分配到work上去(共有24端口,先分配12个acker保证能够放到不同的进程且每个supervisor有2个acker;再分配18个bolt-task,其中6个task会与
acker在一个进程;最后分配10个spout-task分配,应该和bolt-task在一起)
合理
常规测试三
配置:=false,topology_nums=1, topology_level=2, workers=12,
=8,=9,=9,
=8;
机1端口数量=4、机1端口数量=4、机1端口数量=4、机1端口数量=4、
测试目标
①以worker为维度,尽量将worker平均分配到各个supervisor上;
②保证同类型task尽量均分到不同worker和supervisor的基础上,其次保证每一个worker和supervisor的task数量均衡;最后保证直接相关的task放到一个进程上去,
测试结果:
Worker被平均分配到supervisor上
Task按规定分配到work上去
合理
3 worker 设置测试
worker数量设置大于端口数量
配置:=false,topology_nums=1, topology_level=1, work
JStorm 调度测试 来自淘豆网www.taodocs.com转载请标明出处.