storm基础系列之一----storm并发度概念剖析
前言:
学了几天storm的基础,发现如果有hadoop基础,再理解起概念来,容易的多。不过,涉及到一些独有的东西,如调度,如并发度,还是很麻烦。那么,从这一篇开始,力争清晰的梳理这些知识。
在正式学习并发之前,有必要先明确几个基本概念的定义,以及具体作用。
一、基础概念
1.1 Topology 原意拓扑。可以把他理解为是hadoop中的job,他是把一系列的任务项组装后的一个结果。
1.2 Spout 是任务的一种,作用是读取数据,然后组装成一定的格式,发射出去。
1.3 Bolt 是另一种任务,接收Spout或者上级Bolt发射的任务,进行处理。处理后,也有发射功能,当然如果已经处理完成,也可以作为叶子节点不再发射。
1.4 worker 进程,占用独立的jvm,每台机器都可以拥有多个worker。一个Topology,出于分布式的设计,都会把任务分配到多台机器去执行。那么,相应的,也就是分给了一组可能不在同一台机器上的worker。 反过来理解,一个worker里有一个Topology的任务集合的子集,注意不会再包含另一个Topology的任务。
如图:

1.5 executor 执行者,就是我们在代码里,setspout或setbolt时,指定的数值。可以把他看做是线程。在一个work进程里,可以有多个线程。 每个组件component (spout或bolt)由一个或多个executor来执行。这一层概念,是细化到了Topology的内层,也就是具体每个Spout、Bolt上了。也就是说,这一段代码要并行执行的数目。
1.6 task 具体的逻辑处理单元。或者可以叫任务。有多少个task就实例化多少个组件(注意,实例化并不是执行,执行由executor来负责),通常情况下,一个executor线程可以执行一个或同时执行多个task任务,默认是一个。 task数不会改变,而executor数会变。当task数更大些时,实际并发数就是executor的数目。从这里可以看出,task也是从具体的组件层面来定义的。task是一个静态的概念,而executor是动态的概念,是执行者,比如,我配置了task=100,那么就有100个任务等待执行,我再配置executor=10,这意思就是有十个执行者(即10个线程)并发来执行者100个task(内存有100个对象,供调度执行)。
需要指出的是,executor的数量应该小于等于task数量。task可以不设置,不设置默认就是取的executor的数量。
这里有一张经典的图:

这张图中有一点可以指出,右边的那个executor里,是有两个task的,在这个线程里,会循环调用这两个task,不过这两个task应该是对应同一个组件的。
1.7 component 组件,值得是spout或者bolt。
1.8 nimbus 任务分发调度者,相当于JobTracker。
1.9 supervisor 作业执行者,相当于taskTracker。
二、并发度配置
2.1 理清了上述的概念,那么接下来我们梳理下,并发度配置的相关细节:
worker,可在代码中或配置文件中配置。数目最好大于机器数目。conf.setNumWorkers(2)
executor,代码中配置,setBolt(),setSpout()
task数目,代码中配置,setNumTasks()如果不配置,默认取executor数目。
2.2 动态改变并发度
可变的是worker和executor的数目,可通过命令或者webUI
其中命令的为:
storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10
以上就是关于storm一些基本概念,以及概念之间的联系。
因为今天提交了两个Topology,出现了一些错误,于是重新回顾这个关系:
再次总结:
每个worker只会处理一种Topology里的component。
可能是多个worker一起处理一个Topology。
executor是线程,处理具体的component。
task是具体component的实例,可以不指定,不设定的时候,num就是executor的数量。
storm基础系列之一----storm并发度概念剖析的更多相关文章
- Storm概念学习系列之storm的可靠性
这个概念,对于理解storm很有必要. 1.worker进程死掉 worker是真实存在的.可以jps查看. 正是因为有了storm的可靠性,所以storm会重新启动一个新的worker进程. 2.s ...
- Storm概念学习系列之storm的设计思想
不多说,直接上干货! storm的设计思想 在 Storm 中也有对流(Stream)的抽象,流是一个不间断的.无界的连续 Tuple(Storm在建模事件流时,把流中的事件抽象为 Tuple 即元组 ...
- Storm概念学习系列之storm的雪崩
不多说,直接上干货! Storm的雪崩问题的解决办法1: Storm概念学习系列之并行度与如何提高storm的并行度 Storm的雪崩问题的解决办法2:
- Storm概念学习系列之storm的定时任务
不多说,直接上干货! 至于为什么,有storm的定时任务.这个很简单.但是,这个在工作中非常重要! 假设有如下的业务场景 这个spoult源源不断地发送数据,boilt呢会进行处理.然后呢,处理后的结 ...
- Storm概念学习系列之storm流程图
把stream当做一列火车, tuple当做车厢,spout当做始发站,bolt当做是中间站点!!! 见 Storm概念学习系列之Spout数据源 Storm概念学习系列之Topology拓扑 Sto ...
- Storm概念学习系列之storm核心组件
不多说,直接上干货! Storm核心组件 了解 Storm 的核心组件对于理解 Storm 原理非常重要,下面介绍 Storm 的整体,然后介绍 Storm 的核心. Storm 集群由一个主节点和多 ...
- Storm概念学习系列之storm简介
不多说,直接上干货! storm简介 Storm 是 Twitter 开源的.分布式的.容错的实时计算系统,遵循 Eclipse Public License1.0. Storm 通过简单的 API ...
- storm基础系列之二----zookeeper的作用
在storm集群中,我们常常使用zookeeper作为协调者.那么具体发挥的是什么作用呢? 概括来说,zookeeper是nimbus和supervisor进行交互的中介.具体来说有二: 1.nimb ...
- storm基础系列之五---------接入数据收集系统flume
1.基本结构介绍 flume是三层架构,agent,collector,storage.每一层都可水平扩展. 其中,agent就是数据采集方:collector是数据整合方:storage是各种数据落 ...
随机推荐
- 使用if else if else 统计计算
package review20140419;/* * 统计一个班级的成绩,并统计优良中差和不及格同学个数以及求平均分 */public class Test2 { //程序的入口 pub ...
- Guid与id区别
一.产生Guid的方法 1.SqlServer中使用系统自带的NEWID函数: select NEWID() 2.C#中,使用Guid类型的NewGuid方法: Guid gid; ...
- C - 搜索
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Descr ...
- C++学习笔记28:运行期型式信息
RTTI 运行期标识对象的型式信息 优势:允许使用指向基类的指针或引用自如地操作派生类的对象 typeid:获取表达式的型式:type_info:型式信息类 头文件:typeinfo 对象转型模板 d ...
- C++类成员布局
在C++中对象的内存布局与类成员声明的顺序一致,静态成员放在数据区(Data Section)而非对象内存中,若多个类静态成员名称相同,C++则按照name mangling技术进行重命名保证名称的唯 ...
- 旷世奇坑!!!spring 不能自动注入
一入此坑,只想跳楼.我发誓应该不会有第二个人会进这种坑! 问题描述: 总是不能注入dao层,即@Resposity.always!always!always!(尝试了天下之因特网所有的注入方式,都不能 ...
- 解决href标签跳转到WEB-INF下的jsp页面的办法
用的配置struts的action的方法. jsp页面这样写的. class里面的路径是下面的struts配置文件的路径 struts配置文件里这样写的. name里面的内容要和href里面的内用一致 ...
- android 7.0变化
一.加强版的低电耗模式 条件:1未插电源:2屏幕关闭:(N与6.0的区别就在于N在手机非静止时也可进入低电耗模式) 作用过程及方式:1充电状态:2屏幕关闭一定时间:进入一级低电限制:关闭网络,推迟CP ...
- poj1852 Ants ——想法题、水题
求最短时间和最长时间. 当两个蚂蚁相遇的时候,可以看做两个蚂蚁穿过,对结果没有影响.O(N)的复杂度 c++版: #include <cstdio> #define min(a, b) ( ...
- C#对象比较
http://www.veryhuo.com/a/view/42513.html ReferenceEquals:静态方法,不能重写,只能比较引用,如果有一个参数为null会返回false,不会抛出异 ...