分享

Strom Topology执行分析:worker数,Bolt实例数,executor数,task数

hyj 发表于 2014-5-2 20:38:42 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 5 62937
本帖最后由 pig2 于 2014-5-2 20:58 编辑
问题导读:
1.什么是Topology?
2.如何创建Topology?
3.Topology的worker数由谁来配置?
4.Topology中某个bolt的executor数由谁来指定?
5.Supervisor、worker、Executor、Task、Spout、Bolt之间的关系?








在创建Storm的Topology时,我们通常使用如下代码:
builder.setBolt("cpp", new CppBolt(), 3).setNumTasks(5).noneGrouping(pre_name);
Config conf = new Config();
conf.setNumWorkers(3);
参数1:bolt名称 "cpp"
参数2:bolt类型 CppBolt
参数3:bolt的并行数,parallelismNum,即运行topology时,该bolt的线程数
setNumTasks() 设置bolt的task数
noneGrouping()  设置输入流方式及字段
conf.setNumWorkers()设置worker数据。

经过多次试验总结,得出如下结论:
1)Topology的worker数通过config设置,即执行该topology的worker(java)进程数。它可以通过storm rebalance 命令任意调整。
2) Topology中某个bolt的executor数,即parallelismNum,即执行该bolt的线程数,在setBolt时由第三个参数指定。它可以通过storm rebalance 命令调整,但最大不能超过该bolt的task数;
3) bolt的task数,通过setNumTasks()设置。(也可不设置,默认取bolt的executor数),无法在运行时调整。
4)Bolt实例数,这个比较特别,它和task数相等。有多少个task就会new 多少个Bolt对象。而这些Bolt对象在运行时由Bolt的thread进行调度。也即是说

builder.setBolt("cpp", new CppBolt(), 3).setNumTasks(5).noneGrouping(pre_name);
会创建3个线程,但有内存中会5个CppBolt对象,三个线程调度5个对象。



已有(5)人评论

跳转到指定楼层
pig2 发表于 2014-5-2 20:57:35
这里在补充一些:

Supervisor、worker、Executor、Task、Spout、Bolt之间的关系

每台Supervisor上运行着若干个worker进程,在Configure对象中可以配置worker的数量,conf.setNumWorkers(number);

每个Workder进行上运行着若干个Executor执行线程,就是所谓的Task任务。

在TopologyBuilder对象中可以配置Task的数量,topologyBuilder.setNumTasks(number);这些Task任务指的是Spout或者Bolt任务。

在TopologyBuilder对象中可以配置Spout、Bolt的任务的数量。

topologyBuilder.setSpout(“spout tag name”,new XxSpout(),number);
topologyBuilder.setBolt(“bolt tag name”,new XxBolt(),number);
默认情况下# executor = #tasks即一个Executor中运行着一个Task。Spout或者Bolt的Task个数一旦指定之后就不能改变了,而Executor的数量可以根据情况来进行动态的调整。
一句话介绍,每台worker node上可以运行很多个worker,每个worker会开辟很多Executor线程来执行Task。在Storm看来,spout和bolt都是task。

回复

使用道具 举报

叶孤城 发表于 2015-6-15 09:41:56
龙哥,想一个问题,nimbus节点参与运算吗?他上面会分配worker吗?
回复

使用道具 举报

邓立辉 发表于 2015-10-26 15:45:16
叶孤城 发表于 2015-6-15 09:41
龙哥,想一个问题,nimbus节点参与运算吗?他上面会分配worker吗?

不会,但是你可以在nimbus的机器上再起一个supervisor
回复

使用道具 举报

szcountryboy 发表于 2015-12-22 16:36:32
咨询下,有三台supervisor
任务执行时,只有一台在执行。
server      Slots      Used slots
v1           4             0
v2           4             1
v3           4             0
used slots 动态变化,一会v1、一会v2,v3  三个轮流,而不是三个同时,这种情况正常吗?  

TopologyBuilder topology = new TopologyBuilder();
topology.setSpout("KafkaReader",  new KafkaSpout(spoutConfig) , 3);
topology.setBolt("Data1", new Data1(), 5).shuffleGrouping("KafkaReader");
topology.setBolt("Data2", new Data2()).shuffleGrouping("KafkaReader");
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条