Storm中并发程度的理解
Storm中涉及到了很多组件,例如nimbus,supervisor等等,在参考了这两篇文章之后,对这个有了更好的理解。
Understanding the parallelism of a Storm topology
https://github.com/nathanmarz/storm/wiki/Understanding-the-parallelism-of-a-Storm-topology
http://www.cnblogs.com/yufengof/p/storm-worker-executor-task.html
我们先理一下概念:
- 一般对于物理节点来讲,我们部署的节点的类型包括nimbus(master),supervisor(slave),通常是一个nimbus,多个supervisor。nimbus是负责安排任务给supervisor去完成的,即supervisor是实际上干活的。
- 而对于一个supervisor来讲,它可以包含多个worker,worker有可以包含多个executor,executor又可以执行多个task。
这样一说就有点乱,因为这个worker、executor、task和topology,spout和bolt之间又是怎么样的对应关系呢??
首先看下面一张图

supervisor和node是一一对应的关系,而worker就是process(进程),executor就是thread(线程),task就是在spout或bolt中定义的函数。
这样就好理解了,这些从上到下都是一对多的关系。
那supervisor,worker和executor跟topology或component(包括spout和bolt)之间的对应关系呢?
- 一个topology可以在多个supervisor上执行,一个supervisor也可以执行多个topology
- 但是,一个worker只执行某个topology,一个topology由多个worker来执行
- 一个executor可以执行一个component中的多个task,但是一个component可以由多个executor来执行,这就是我们在编程中指定的并发程度。后面会看到。
- 一个executor默认对应一个task
- 一个worker中包含多个executor,但是这些executor不一定都是用来处理同一个component
我们看storm wiki中的一张图片来解释

对于这个topology,
- 它包含3个component,1个spout,2个bolt
- 它包含2个worker process,10个executor thread,12个task
- 同颜色属于同一个component
Config conf = new Config();
conf.setNumWorkers(2); // use two worker processes topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); // set parallelism hint to 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()
);
代码如上,worker process,executor thread,task这些的数目都可以进行设置。
所以接下来我们应该会关心一个topology默认对应的worker数是多少?一个executor默认对应的task数是多少?
更重要的是,我们在编码过程中已经指定了worker process数和exector thread数,但是这两个数可以在运行时被修改,以更好地适应负载的变化!这样的方式叫做rebalance!
它能够修改worker的数目,也就是说我们是否可以通过监控,来实现自动水平拓展呢??例如结合IaaS,加一个supervisor节点加入到集群中?同时启动对应的worker进程,当负载低的时候,收回对应的supervisor节点,将虚拟机返回到对应的VM池里呢??
注意一点是:Task的数目在启动后就不能变了,但是可以改executor,即执行的线程数,所以executor数一定是小于等于task数,才能保证每一个executor至少有一个task可以运行.
所以对于task数太少,后期也无法提高太多!
- 第一种方式是使用storm的UI
- 第二种方式是使用CLI tool来修改
# Reconfigure the topology "mytopology" to use 5 worker processes,
# the spout "blue-spout" to use 3 executors and
# the bolt "yellow-bolt" to use 10 executors. $ storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10
具体请参考wiki的文章
Storm中并发程度的理解的更多相关文章
- 关于go中并发的初步理解
1.一些概念的介绍: 概念 描述 进程 在内存中的程序.有自己独立的独占的虚拟 CPU .虚拟的 Memory.虚拟的 IO devices. (1) 每一进程占用独立的地址空间. 此处的地址空间包括 ...
- 2、Storm中的一些概念理解
1.Tuple,Value,Field Tuple官方解释: "A tuple is a named of values where each value can be any type.& ...
- storm源码之理解Storm中Worker、Executor、Task关系 + 并发度详解
本文导读: 1 Worker.Executor.task详解 2 配置拓扑的并发度 3 拓扑示例 4 动态配置拓扑并发度 Worker.Executor.Task详解: Storm在集群上运行一个To ...
- 用实例的方式去理解storm的并发度
什么是storm的并发度 一个topology(拓扑)在storm集群上最总是以executor和task的形式运行在suppervisor管理的worker节点上.而worker进程都是运行在jvm ...
- Jmeter中一些概念的理解——90%响应时间、事务、并发
一.90%响应时间(参考虫师博客) 90%Line 一组数由小到大进行排列,找到他的第90%个数(假如是12),那么这个数组中有90%的数将小于等于12 . 用在性能测试的响应时间,也就是90%请求 ...
- go---weichart个人对Golang中并发理解
个人觉得goroutine是Go并行设计的核心,goroutine是协程,但比线程占用更少.golang对并发的处理采用了协程的技术.golang的goroutine就是协程的实现. 十几个gorou ...
- Storm中遇到的日志多次重写问题(一)
业务描述: 统计从kafka spout中读取的数据条数,以及写入redis的数据的条数,写入hdfs的数据条数,写入kafaka的数据条数.并且每过5秒将数据按照json文件的形式写入日志.其中保存 ...
- storm的并发机制
storm的并发机制 storm计算支持在多台机器上水平扩容,通过将计算切分为多个独立的tasks在集群上并发执行来实现. 一个task可以简单地理解:在集群某节点上运行的一个spout或者bolt实 ...
- storm中worker、executor、task之间的关系
这里做一些补充: worker是一个进程,由supervisor启动,并只负责处理一个topology,所以不会同时处理多个topology. executor是一个线程,由worker启动,是运行t ...
随机推荐
- ACM1998
/* 魔方阵,古代又称“纵横图”,是指组成元素为自然数1.2…n的平方的n×n的方阵, 其中每个元素值都不相等,且每行.每列以及主.副对角线上各n个元素之和都相等. 输入一个奇数,实现奇数魔方阵. 附 ...
- hdfs 数据块重分布 sbin/start-balancer.sh -threshold
数据块重分布sbin/start-balancer.sh -threshold <percentage of disk capacity>percentage of disk capa ...
- hadoop-1.1.2集群搭建
Hadoop安装分为三种不同模式: 本地模式:hadoop在运行时,不使用hdfs,而是使用linux操作系统的文件系统.(默认hadoop就是本地模式) 伪分布模式:在一个节点上运行hadoop(指 ...
- syscolumns、sysconstraints、sysobjects
1.根据表名查询对象ID SELECT OBJECT_ID('Production.Product') 结果:1429580131 不能作为输入参数:列名.约束名 能作为输入参数:表名 2.根据对象I ...
- Ubuntu 安装 Sun JDK
1. 下载 Oracle网站下载JDK7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1 ...
- 获取week of year的小程序
#coding=utf8 import urllib, BeautifulSoup web=urllib.urlopen("http://whatweekisit.com/") s ...
- -bash: ./radar.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录
运行shell脚本时,报下面这个错误: -bash: ./radar.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录 错误分析: 因为操作系统是windows, ...
- 第二百六十三天 how can I 坚持
今天解脱了,放下了,小罗娜,不给力,话说下一步该咋办呢. 鱼不想过双十一自杀了.这都二十二号了,好快. 该把给罗娜说的那些话保存下来.可惜已经删了. 不知道做的对不对,反正就是没缘分,就这样吧. 睡觉 ...
- Spark生态之Spark Core
- IPhone 设备状态、闪光灯状态
//判断闪光灯状态,修改默认的"CameraFlashOff" 按钮图片.转由 TGCameraFlash.m 控制图标切换 AVCaptureDevice *device ...