[size=medium][b]并发度:[/b][/size]
worker:指的是component (spout或bolt),并行的跑在不同的machine上的topology子集。
一个Topology可以包含一个或多个worker,worker process就是执行一个topology的子集, 并且worker只能属于一个topology。
设置worker数量
executor:worker的执行线程。
一个worker可用包含一个或多个executor, 每个component (spout或bolt)至少对应于一个executor, 所以可以说executor执行一个组件compenent(spout||bolt)的子集, 同时一个executor只能对应于一个component。
设置executor方式:
Task:是具体的处理逻辑对象, 一个executor线程可以执行一个或多个tasks。
一般默认每个executor只执行一个task, 所以我们往往认为task就是执行线程, 其实不是。
task代表最大并发度, 一个component的task数是不会改变的, 但是一个componet的executer数目是会发生变化的(storm rebalance命令)。可以理解与executor一样,增加并发数
task数>=executor数, executor数代表实际并发数
设置task方式:
总之:
一个worker可以包含多个executor
一个executor可以包含多个task
[img]http://dl2.iteye.com/upload/attachment/0124/3810/1476db21-5de0-3271-8e46-4d4397fddc22.png[/img]
[size=medium]示例:[/size]
[img]http://dl2.iteye.com/upload/attachment/0124/3812/26a054b7-0d42-3ffc-bdde-eecc204e2ea8.png[/img]
worker:指的是component (spout或bolt),并行的跑在不同的machine上的topology子集。
一个Topology可以包含一个或多个worker,worker process就是执行一个topology的子集, 并且worker只能属于一个topology。
设置worker数量
Config conf = new Config();
conf.setNumWorkers(2);
executor:worker的执行线程。
一个worker可用包含一个或多个executor, 每个component (spout或bolt)至少对应于一个executor, 所以可以说executor执行一个组件compenent(spout||bolt)的子集, 同时一个executor只能对应于一个component。
设置executor方式:
//parallelism_hint即设置的executor线程数
builder.setSpout("spout", new MySpout(), 1);
setBolt(String id, IRichBolt bolt, Number parallelism_hint);
Task:是具体的处理逻辑对象, 一个executor线程可以执行一个或多个tasks。
一般默认每个executor只执行一个task, 所以我们往往认为task就是执行线程, 其实不是。
task代表最大并发度, 一个component的task数是不会改变的, 但是一个componet的executer数目是会发生变化的(storm rebalance命令)。可以理解与executor一样,增加并发数
task数>=executor数, executor数代表实际并发数
设置task方式:
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2).setNumTasks(4).shuffleGrouping("blue-spout");
总之:
一个worker可以包含多个executor
一个executor可以包含多个task
[img]http://dl2.iteye.com/upload/attachment/0124/3810/1476db21-5de0-3271-8e46-4d4397fddc22.png[/img]
[size=medium]示例:[/size]
Config conf = new Config();
conf.setNumWorkers(2);
topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2);
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2).setNumTasks(4).shuffleGrouping("blue-spout");
topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6).shuffleGrouping("green-bolt");
StormSubmitter.submitTopology("mytopology",conf,topologyBuilder.createTopology());
[img]http://dl2.iteye.com/upload/attachment/0124/3812/26a054b7-0d42-3ffc-bdde-eecc204e2ea8.png[/img]