前言:

学了几天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并发度概念剖析的更多相关文章

  1. Storm概念学习系列之storm的可靠性

    这个概念,对于理解storm很有必要. 1.worker进程死掉 worker是真实存在的.可以jps查看. 正是因为有了storm的可靠性,所以storm会重新启动一个新的worker进程. 2.s ...

  2. Storm概念学习系列之storm的设计思想

    不多说,直接上干货! storm的设计思想 在 Storm 中也有对流(Stream)的抽象,流是一个不间断的.无界的连续 Tuple(Storm在建模事件流时,把流中的事件抽象为 Tuple 即元组 ...

  3. Storm概念学习系列之storm的雪崩

    不多说,直接上干货! Storm的雪崩问题的解决办法1: Storm概念学习系列之并行度与如何提高storm的并行度 Storm的雪崩问题的解决办法2:

  4. Storm概念学习系列之storm的定时任务

    不多说,直接上干货! 至于为什么,有storm的定时任务.这个很简单.但是,这个在工作中非常重要! 假设有如下的业务场景 这个spoult源源不断地发送数据,boilt呢会进行处理.然后呢,处理后的结 ...

  5. Storm概念学习系列之storm流程图

    把stream当做一列火车, tuple当做车厢,spout当做始发站,bolt当做是中间站点!!! 见 Storm概念学习系列之Spout数据源 Storm概念学习系列之Topology拓扑 Sto ...

  6. Storm概念学习系列之storm核心组件

    不多说,直接上干货! Storm核心组件 了解 Storm 的核心组件对于理解 Storm 原理非常重要,下面介绍 Storm 的整体,然后介绍 Storm 的核心. Storm 集群由一个主节点和多 ...

  7. Storm概念学习系列之storm简介

    不多说,直接上干货! storm简介 Storm 是 Twitter 开源的.分布式的.容错的实时计算系统,遵循 Eclipse Public License1.0. Storm 通过简单的 API ...

  8. storm基础系列之二----zookeeper的作用

    在storm集群中,我们常常使用zookeeper作为协调者.那么具体发挥的是什么作用呢? 概括来说,zookeeper是nimbus和supervisor进行交互的中介.具体来说有二: 1.nimb ...

  9. storm基础系列之五---------接入数据收集系统flume

    1.基本结构介绍 flume是三层架构,agent,collector,storage.每一层都可水平扩展. 其中,agent就是数据采集方:collector是数据整合方:storage是各种数据落 ...

随机推荐

  1. 一个assert的写法

    ]; int assert_buf_len; #ifdef XXX_DEBUG #define assert(expr, ...) \ do{ \ if ((!(expr))) \ {\ char * ...

  2. RealProxy实现AOP编程(2)

    稍微变化一下!注意区别. Program.cs class Program { static void Main(string[] args) { User user = " }; var ...

  3. 【视频演示】FireBase链接已有应用&实时数据库的配置与使用

    全程无编辑,一镜到底,一帧未减,带上犯傻的时间全部不到31分钟:Firebase链接与基础功能使用如此之简单,跟我一起动手,从零开始链接Firebase吧~注意: 输入声源为笔记本自带麦克风,所以风扇 ...

  4. XmlSerializer(Type type, Type[] extraTypes) 内存泄漏

    在使用XmlSerializer进行序列化或者反序列的时候,对于下面的两个构造方法 XmlSerializer(Type)XmlSerializer.XmlSerializer(Type, Strin ...

  5. jsp的九大内置对象和四大作用域(转)

    定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量 JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 1.request对象(作用域)  客户端的 ...

  6. iOS7上的地图定位接口BUG

    遇到个BUG,卡了好久,就是在iOS9上定位接口是正常的,但是在iOS7上就一直拿不到回调,但是看系统日志其实已经定位到了.总是在报一句not response,也没有具体函数名 昨天灵机一动,从de ...

  7. 今天我看了一个H5游戏EUI的例子,我都快分不清我到底是在用什么语言编译了代码了,作为刚刚学习H5游戏开发的菜鸟只能默默的收集知识

    今天看了一个EUI的demo,也是接触H5游戏开发的第五天了,我想看看我能不能做点什么出来,哎,自己写果然还是有问题的.在看EUI哪一个demo的时候就遇见了一些摇摆不定的问题,我觉得提出来 1.to ...

  8. Android Sqlite数据库加密

    Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个: 1. 对几个关键的字段使用加密算法,再存入数据库 2. 对整个数据库进行加密 SQLite数据库加密工具: 收 ...

  9. 微信朋友圈转疯了(golang写小爬虫抓取朋友圈文章)

    很多人在朋友圈里转发一些文章,标题都是什么转疯啦之类,虽然大多都也是广告啦,我觉得还蛮无聊的,但是的确是有一些文章是非常值得收藏的,比如老婆经常就会收藏一些养生和美容的文章在微信里看. 今天就突发奇想 ...

  10. System.DateUtils 4. IsValidDateTime... 有效时间判断

    编译版本:Delphi XE7 function IsValidDate(const AYear, AMonth, ADay: Word): Boolean;function IsValidTime( ...