如何设置Storm的并发
来源:互联网 发布:自考做题软件 编辑:程序博客网 时间:2024/05/17 08:41
1. storm并行的基本概念
- storm集群中的一个supervisor节点可以运行一个或者多个worker,对应于一个或者多个topologies。1个worker进程运行1个或多个executor线程。每个worker从属于一个topology。executor是一个物理线程,每1个executor运行着相同的组件(spout或bolt)的1个或多个task。1个task执行着实际的数据处理。
一个实际的例子: 事项 描述 配置选项 在代码中如何设置 #worker processes为在集群上运行的topology创建多少worker进程Config#TOPOLOGY_WORKERSConfig#setNumWorkers#executors (threads)为每个组件(spout/bolt)生成多少个executor。?TopologyBuilder#setSpout()
TopologyBuilder#setBolt()
在Storm 0.8 中参数parallelism_hint
为bolt具体话executor的数目而非task。#tasks为每个组件(spout/bolt)创建多少个executor。Config#TOPOLOGY_TASKSComponentConfigurationDeclarer#setNumTasks()- 如下例子为在实际上如何设置如上变量:
- 配置一个Storm bolt的并行度
- topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
.setNumTasks(4)
.shuffleGrouping("blue-spout"); - 如上代码为运行
GreenBolt
在Storm中配置2个executor和4个相应的task,Storm将在每个executor线程中运行2个task;如果没有在代码进行配置,则默认以每个executor一个task来运行。 - 2 是否需要提高workers数目
(1) 最好一台机器上的一个topology只使用一个worker,主要原因时减少了worker之间的数据传输
workers的多少由supervisors来设置,与每个supervisor节点上的JVM槽数相关。在topology设置的事情就是多少个
worker槽将被声明。推荐每个supervisor节点为每个topology创建一个worker。如果一个topology运行在8核的节点上,parallelism hint为24,则每个节点将为每个bolt启动8个executor,每个对应一个核。运行3个 worker(每个分配8executer)将比运行24个worker(每个分配1executer)更为有利。- 首先,在同一个worker中数据将在executor间分区,而不必命中transfer buffer,tuples将直接由发送方缓冲区到接收方缓冲区。如果目标executor在同一机器的不同worker,将经由send -> worker transfer -> local socket -> worker recv -> exec recv buffer。
- 再次,3个带有非常大的后台cache的聚合器将好于24个有小的后台cache的聚合器。这将降低倾斜的影响,提高LRU效率。
- 最后,越少的worker则意味着越少的控制流。
(2) 增加worker的数目也会有性能的提升,这基于系统的瓶颈在哪里。每个worker有单个线程通过Zmq连接向另一worker传送tuple,如果瓶颈在CPU而且每个worker处理大量的tuple,更多的worker将获得更好的吞吐量。
因此,没有明确的答案,应该基于各自的环境和设计尝试不同的配置。
3 executor的数目
executor是真正的并行度(事实上的并行度)。(task数目是想要设置的并行度)
executor初始数目=spout数目+bolt数目+acker数目 (这些加起来也就是task数目。)
spout数目,bolt数目,acker数目运行时是不会变化的,但是executor数目可以变化。
4 是否需要提高TASK数目
TASK的存在只是为了topology扩展的灵活性,与并行度无关。
配置拓扑的并发度
注意Storm的术语"并发度(parallelism)"是特别用来描述所谓的parallelism hint的,这代表1个组件的初始的executor(线程)的数量。在此文档中我们使用术语"并发度"的一般意义来描述你不但可以配置executor的数量,还可以配置worker进程的数量,还可以是1个拓扑的task的数量。在用到并发度的狭义的定义时我们会特别提出。
下面的小节给出了一些不同的配置选项,还有你如何在代码中设置它们。有多种方法可以进行设置,表格列举了其中几种。Storm目前有下列的配置优先级:defaults.yaml < storm.yaml < 特定拓扑的配置 < 内部特定组件的配置 < 外部特定组件的配置。
worker进程的数量
- 描述: 1个拓扑有多少个分布于集群中的机器的worker进程
- 配置选项: TOPOLOGY_WORKERS
- 如何在代码中设置 (例子):
- Config#setNumWorkers
executor的数量 (线程)
- 描述: 每个组件会有多少个executor
- 配置选项: ?
- 如何在代码中设置 (例子):
- TopologyBuilder#setSpout()
- TopologyBuilder#setBolt()
- 注意在Storm 0.8以后
parallelism_hint参数指定的是bolt的初始的executor的数量。
task的数量
- 描述: 每个组件有多少task
- 配置选项: TOPOLOGY_TASKS
- 如何在代码中设置 (例子):
- ComponentConfigurationDeclarer#setNumTasks()
这是一个简单的代码例子,展示了在实践中如何设置:
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
.setNumTasks(4).shuffleGrouping("blue-spout);
在上面的代码中我们配置了Storm运行GreenBolt指定了初始有2个executor和4个关连的task。Storm会在每个 executor(线程)2个task。如果你不想显式的配置task的数量,Storm会默认的为每个executor运行1个task。
一个运行中的拓扑的例子
下 面的图表展示了1个简单拓扑在实际操作中看起来是怎样的。这个拓扑包含了3个组件:1个spout叫做BlueSpout,2个bolt分别叫 GreenBolt和YellowBolt。BlueSpout发送它的输出到GreenBolt,GreenBolt又把它的输出发到 YellowBolt。
下面是对上图的简要分析:
3个组件的并发度加起来是10,就是说拓扑一共有10个executor,一共有2个worker,每个worker产生10 / 2 = 5条线程。
绿色的bolt配置成2个executor和4个task。为此每个executor为这个bolt运行2个task。
下面的代码配置了这3个组件
,相关代码如下:Config conf = new Config();
conf.setNumWorkers(2); // 使用2个worker进程
topologyBuilder.setSpout(“blue-spout”, new BlueSpout(), 2); // parallelism hint为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() );
And of course Storm comes with additional configuration settings to control the parallelism of a topology, including:
此外还有其他的配置来控制拓扑的并发度,包括了:
- TOPOLOGY_MAX_TASK_PARALLELISM: 这个设置指定了1个单独的组件的executor的数量的上限。当在测试阶段使用本地模式运行1个拓扑时,用来限制生成的线程的数量。你可以像下面这样来使用:
- Config#setMaxTaskParallelism().
如何改变1个正在运行的拓扑的并发度
Storm有一个不错的特性,你可以在不需要重启集群或拓扑,来增加或减少worker进程和executor的数量。这样行为成为rebalancing。
你有两个选项可以rebalance1个拓扑:
- 使用Storm的web UI来rebalance。
- 像下面描述的那样,使用命令行工具来做:
# 重新配置拓扑 “mytopology” 使用5个worker进程。
# spout “blue-spout” 使用3个executor
# bolt “yellow-bolt” 使用10个executor
$ storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10
参考文献:
(1)http://www.michael-noll.com/blog/2012/10/16/understanding-the-parallelism-of-a-storm-topology/
- 如何设置Storm的并发
- Storm并发设置
- storm的并发
- storm的并发
- storm的并发
- Storm学习00---Storm的并发模型
- Storm Topology的并发度
- Storm Topology的并发度
- Storm Topology的并发度
- Storm Topology的并发度
- 如何设置apache的并发数量
- storm学习-Storm Topology的并发度(转)
- 搭建Storm集群与Storm的并发概念简介
- storm记录--9- Storm Topology的并发度
- 理解Storm中的拓扑的并发度
- 理解Storm Topology的并发机制
- 动态改变storm的并发度
- Storm并发度详解
- RTSP学习笔记1——testRTSPClient
- 解释型语言跟编译型语言的区别
- Codeigniter的一些优秀实践
- 关于NXOGRE---BLOODYMESS
- 里程计、推算定位与视觉里程计
- 如何设置Storm的并发
- handler心得
- 轻量级HTTP服务器Nginx(配置与调试Nginx)
- 一位初学java的学生的一些上课心得
- 域运算符
- Docker实践9:备份方案
- 学习ruby的相关网站
- nxOgre物理引擎
- 奋斗中的码农。。。