storm之8:并行度

(一)storm拓扑的并行度可以从以下4个维度进行设置:

1、node(服务器):指一个storm集群中的supervisor服务器数量。

2、worker(jvm进程):指整个拓扑中worker进程的总数量,这些数量会随机的平均分配到各个node。

3、executor(线程):指某个spout或者bolt的总线程数量,这些线程会被随机平均的分配到各个worker。

4、task(spout/bolt实例):task是spout和bolt的实例,它们的nextTuple()和execute()方法会被executors线程调用。除非明确指定,storm会给每个executor分配一个task。如果设置了多个task,即一个线程持有了多个spout/bolt实例.

注意:以上设置的都是总数量,这些数量会被平均分配到各自的宿主上,而不是设置每个宿主进行多少个进程/线程。详见下面的例子。

(二)并行度的设置方法

1、node:买机器吧,然后加入集群中……

2、worker:Config#setNumWorkers() 或者配置项 TOPOLOGY_WORKERS

3、executor:Topology.setSpout()/.setBolt()

4、task:ComponentConfigurationDeclarer#setNumWorker()

(三)例子:

        // 3、创建topology
        TopologyBuilder builder = new TopologyBuilder();
        builder.setSpout("kafka-reader", new KafkaSpout(spoutConf), 5);//设置executor数量为5
        builder.setBolt("filter-bolt", new FilterBolt(), 3).shuffleGrouping(
                "kafka-reader");//设置executor数量为3
        builder.setBolt("log-splitter", new LogSplitterBolt(), 3)
                .shuffleGrouping("filter-bolt");//设置executor数量为5
        builder.setBolt("hdfs-bolt", hdfsBolt, 2).shuffleGrouping(
                "log-splitter");//设置executor数量为2

        // 4、启动topology
        Config conf = new Config();
        conf.put(Config.NIMBUS_HOST, nimbusHost);
        conf.setNumWorkers(3);      //设置worker数量
        StormSubmitter.submitTopologyWithProgressBar(topologyName, conf,
                builder.createTopology());

1、通过config.setNumWorkers(3)将worker进程数量设置为3,假设集群中有3个node,则每个node会运行一个worker。

2、executor的数量分别为:

spout:5

filter-bolt:3

log-splitter:3

hdfs-bolt:2

总共为13个executor,这13个executor会被随机分配到各个worker中去。

注:这段代码是从kafka中读取消息源的,而这个topic在kafka中的分区数量设置为5,因此这里spout的线程娄为5.

3、这个示例都没有单独设置task的数量,即使用每个executor一个task的默认配置。若需要设置,可以:

builder.setBolt("log-splitter", new LogSplitterBolt(), 3)

.shuffleGrouping("filter-bolt").setNumTasks(5);

来进行设置,这5个task会被分配到3个executor中。

(四)并行度的动态调整

对storm拓扑的并行度进行调整有2种方法:

1、kill topo—>修改代码—>编译—>提交拓扑

2、动态调整

第1种方法太不方便了,有时候topo不能说kill就kill,另外,如果加几台机器,难道要把所有topo kill掉还要修改代码?

因此storm提供了动态调整的方法,动态调整有2种方法:

1、ui方式:进入某个topo的页面,点击rebalance即可,此时可以看到topo的状态是rebalancing。但此方法只是把进程、线程在各个机器上重新分配,即适用于增加机器,或者减少机器的情形,不能调整worker数量、executor数量等

2、cli方式:storm rebalance

举个例子

storm rebalance toponame -n 7 -e filter-bolt=6 -e hdfs-bolt=8

将topo的worker数量设置为7,并将filter-bolt与hdfs-bolt的executor数量分别设置为6、8.

此时,查看topo的状态是rebalancing,调整完成后,可以看到3台机器中的worker数量分别为3、2、2

时间: 2024-10-31 20:47:36

storm之8:并行度的相关文章

storm教程

二.安装部署 ? 一.storm伪分布式安装 (一)环境准备1.OS:debian 72.JDK 7.0 (二)安装zookeeper1.下载zookeeper并解压?wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz?tar -zxvf zookeeper-3.4.6.tar.gz2.准备配置文件cd confcp zoo_sample.cfg zoo.cfg?3.启动zoo

Storm的基本知识

上篇文章本人简单的介绍了Storm的起源,今天本人又继续学习了Storm的基本的一些知识,基本了解了他的基本用法,还好,不算太难,如果大家了解了Hadoop的MapReduce模型的话,看这个也是非常类似的.在了解Storm的原型时,首先了解一些概念. 1.Tuple(元组),作为消息传递的基本单元,元组中的字段可以是任何类型的对象.元组会用于后面提到的Bolt方法的execute方法. 2.Spout(喷口),是拓扑的流的来源,就是产生源数据流的组件.喷口的数据来源可以有几种方式.(1).直接

Storm并行度

1.Storm并行度相关的概念 Storm集群有很多节点,按照类型分为nimbus(主节点).supervisor(从节点),在conf/storm.yaml中配置了一个supervisor有多个槽(supervisor.slots.ports),每个槽就是一个JVM,就是一个worker,在每个worker里面可以运行多个线程叫做executor,在executor里运行一个topology的一个component(spout.bolt)叫做task. 1.并行度 storm的并行是由非常多的

Storm的并行度详解

Storm的并行度是非常重要的,通过提高并行度可以提高storm程序的计算能力. 那strom是如何提高并行度的呢? Strom程序的执行是由多个supervisor共同执行的.supervisor运行的是topology中的spout/bolt task task  是storm中进行计算的最小的运行单位,表示是spout或者bolt的运行实例. 程序执行的最大粒度的运行单位是进程,刚才说的task也是需要有进程来运行它的,在supervisor中,运行task的进程称为worker, Sup

Storm的并行度、Grouping策略以及消息可靠处理机制简介

概念: Workers (JVMs): 在一个节点上可以运行一个或多个独立的JVM 进程.一个Topology可以包含一个或多个worker(并行的跑在不同的machine上), 所以worker process就是执行一个topology的子集, 并且worker只能对应于一个topology Executors (threads): 在一个worker JVM进程中运行着多个Java线程.一个executor线程可以执行一个或多个tasks.但一般默认每个executor只执行一个task.

【原】【译文】理解storm拓扑并行度

原文地址: http://storm.apache.org/releases/1.2.1/Understanding-the-parallelism-of-a-Storm-topology.html 什么构成一个运行的拓扑:工作进程,执行器和任务 storm区分以下三个用于在Storm集群中实际运行拓扑的主要实体: 1. 工作进程2. 执行器(线程)3. 任务 这是他们的关系的一个简单的说明 [译者理解:1个工作进程(worker)可包括1或多个执行器(executor/thread),1个执行

Storm笔记整理(四):Storm核心概念与验证——并行度与流式分组

[TOC] Storm核心概念之并行度 Work 1个worker进程执行的是1个topology的子集(注:不会出现1个worker为多个topology服务).1个worker进程会启动1个或多个executor线程来执行1个topology的(spout或bolt).因此,1个运行中的topology就是由集群中多台(可能是一台)物理机上的一个或者多个worker进程组成的. Executor executor是worker进程启动的一个单独线程. 每个executor只会运行1个topo

用实例的方式去理解storm的并行度

什么是storm的并发度 一个topology(拓扑)在storm集群上最总是以executor和task的形式运行在suppervisor管理的worker节点上.而worker进程都是运行在jvm虚拟机上面的,每个拓扑都会被拆开多个组件分布式的运行在worker节点上. 1.worker 2.executor 3.task 这三个简单关系图: 一个worker工作进程运行一个拓扑的子集(其实就是拓扑的组件),每个组件的都会以executor(线程)在worker进程上执行,一个worker进

Storm worker 并行度等理解

Storm 调优是非常重要的, 仅次于写出正确的代码, 好在Storm官网上有关于worker executors tasks的介绍, http://storm.incubator.apache.org/documentation/Understanding-the-parallelism-of-a-Storm-topology.html 这篇文章是收录自这个blog: http://www.michael-noll.com/blog/2012/10/16/understanding-the-p