Storm集群中执行的各种组件及其并行

一、Storm中执行的组件

我们知道,Storm的强大之处就是能够非常easy地在集群中横向拓展它的计算能力,它会把整个运算过程切割成多个独立的tasks在集群中进行并行计算。在Storm中,一个task就是执行在集群中的一个Spout或Bolt实例。

为了方便理解Storm怎样并行处理我们分给它的任务,这里我先介绍一下在集群中涉及到Topology的四种组件:

  • Nodes(machines):集群中的节点,就是这些节点一起工作来执行Topology。
  • Workers(JVMs):一个worker就是一个独立的JVM进程。每一个节点都能够通过配置执行一个或多个workers,一个Topology能够指定由多少个workers来执行。
  • Executors(threads):一个worker JVM中执行的线程。一个worker进程能够执行一个或多个executor线程。一个Executor能够执行多个tasks,Storm默认一个每一个executor分配一个task。
  • Tasks(bolt/spout实例):Tasks就是spouts和bolts的实例,它详细是被executor线程处理的。

二、Storm中的并行(以WordCountTopology为例)

我们能够通过配置来调整我们work的并行数量,如果我们不进行设置,Storm默认大部分过程的并行数量为1。如果我们对WordCountTopology不单独进行配置,那么我们的Topology运行情况例如以下图所看到的:

 我们的一个节点会为我们的Topology分配一个worker,这个worker会为每一个Task启动一个Executor线程。

2.1 为Topology添加workers

一种最简单的提高Topology运算能力的途径就是为我们的Topology添加workers。Storm为我们提供了两种途径来添加workers:通过配置文件或通过程序设置。

通过Config对象来配置workers:

 Config config = new Config();

     config.setNumWorkers(2);

注意:在LocalMode下无论设置几个workers,终于都仅仅有一个worker JVM进程。

2.2 配置executors和tasks

前面我们已经说过,Storm会为每一个Topology组件创建一个task,而默认一个executor仅仅处理一个task。task是spouts和bolts的实例,一个executor线程可由处理多个tasks,tasks是真正处理详细数据的一个过程,我们在代码中写的spout和bolt能够看做是由集群中分布的tasks来执行的。Task的数量在整个topology执行期间通常是不变的,可是组件的Executors是有可能发生变化的。这也就意味着:threads<=tasks。

2.2.1 设置executor(thread)数量

通过设置parallelism hint来指定一个组件的executors。

  • 描写叙述:每一个组件产生多少个Executor
  • 配置选项:?
  • 在代码中配置:

以下我们指定SentenseSpout的并行数量为2,则这个Spout组件会有两个executors,每一个executor分配一个task,其Topology的执行情况例如以下图所看到的:

builder.setSpout(SENTENCE_SPOUT_ID, spout, 2);

2.2.2 设置task的数量

     通过setNumTasks()方法来指定一个组件的tasks数量。

以下我们为SplitSentenceBolt 设置4个tasks和2个executors,这种话每一个executor线程将被分配运行4/2=2个tasks,然后再为WordCountBolt分配4个task,每一个task由一个executor负责运行。其Topology例如以下图所看到的:

 builder.setBolt(SPLIT_BOLT_ID, splitBolt, 2).setNumTasks(4).shuffleGrouping(SENTENCE_SPOUT_ID);

     builder.setBolt(COUNT_BOLT_ID, countBolt, 4).fieldsGrouping(SPLIT_BOLT_ID, newFields("word"));

   假设一開始分配2个workers,则Topology的执行情况例如以下图所看到的:

三、一个topology的样例

以下这幅图展示了一个实际topology的全景,topology由三个组件组成,一个Spout:BlueSpout,两个Bolt:GreenBolt、YellowBolt。

如上图,我们配置了两个worker进程,两个Spout线程,两个GreenBolt线程和六个YellowBolt线程,那么分布到集群中的话,每一个工作进程都会有5个executor线程。以下看一下详细代码:

 java 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() );

当然,Storm中也有一个參数来控制topology的并行数量:

四、怎样改变一个执行topology中的Parallelism

Storm中一个非常好的特性就是能够在topology执行期间动态调制worker进程或Executor线程的数量而不须要重新启动topology。这样的机制被称作rebalancing。

我们有两种方式来均衡一个topology:

  1. 通过Storm web UI来均衡
  2. 通过CLI tool storm 来均衡

以下就是一个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 

时间: 2024-12-24 19:39:23

Storm集群中执行的各种组件及其并行的相关文章

Storm官方文档翻译之在生产环境集群中运行Topology

在进群生产环境下运行Topology和在本地模式下运行非常相似.下面是步骤: 1.定义Topology(如果使用Java开发语言,则使用TopologyBuilder来创建) 2.使用StormSubmitter向集群提交Topology.StormSubmitter有三个参数,Topology的名字,Topology的配置,和Topology本身.下面是例子: ? 1 2 3 4 Config conf = new Config(); conf.setNumWorkers(20); conf.

Storm集群组件和编程模型

 Storm工作原理: Storm是一个开源的分布式实时计算系统,常被称为流式计算框架.什么是流式计算呢?通俗来讲,流式计算顾名思义:数据流源源不断的来,一边来,一边计算结果,再进入下一个流. 比如一般金融系统一直不断的执行,金融交易.用户全部行为都记录进日志里,日志分析出站点运维.猎户信息.海量数据使得单节点处理只是来.所以就用到分布式计算机型,storm 是当中的典型代表之中的一个,一般应用场景是:中间使用一个消息队列系统如kafka,先将消息缓存起来,storm 中有非常多的节点,分布

Storm集群安装部署步骤【详细版】

作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2012/11/30/how-to-install-and-deploy-storm-cluster.html 本文以Twitter Storm官方Wiki为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章节以“注意事项”的形式给出. 1. Storm集群组件 Storm集群中包含两

Storm集群安装详解

Storm集群安装详解 storm有两种操作模式: 本地模式和远程模式. 本地模式:你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 远端模式:你提交的topology会在一个集群的机器上执行. 本文以Twitter Storm官方Wiki为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章节以“注意事项”的形式给出. 1.   Strom集群组件 Storm集群中包含两类节点:主控节点(Master Node)和工

Storm 集群

Apache Storm Storm是一个分布式的,可靠的,容错的数据流处理系统.Storm集群的输入流由一个被称作spout的组件管理,spout把数据传递给bolt,bolt要么把数据保存到某种存储器,要么把数据传递给其它的bolt.一个Storm集群就是在一连串的bolt之间转换spout传过来的数据. 1.Storm组件:在Storm集群中.有两类节点:主节点master node和工作节点worker nodes. 主节点运行Nimbus守护进程,这个守护进程负责在集群中分发代码,为工

Storm笔记整理(三):Storm集群安装部署与Topology作业提交

[TOC] Storm分布式集群安装部署 概述 Storm集群表面类似Hadoop集群.但在Hadoop上你运行的是"MapReduce jobs",在Storm上你运行的是"topologies"."Jobs"和"topologies"是大不同的,一个关键不同是一个MapReduce的Job最终会结束,而一个topology永远处理消息(或直到你kill它). Storm集群有两种节点:控制(master)节点和工作者(wo

1.1 Storm集群安装部署步骤

安装storm集群,需要依赖以下组件: Zookeeper Python Zeromq Storm JDK JZMQ 故安装过程根据上面的组件分为以下几步: 安装JDK 安装Zookeeper集群 安装Python及依赖 安装Storm 另外,操作系统环境为:Centos6.4,安装用户为:root. 1. 安装JDK 安装jdk有很多方法,可以参考文博客使用yum安装CDH Hadoop集群中的jdk安装步骤,需要说明的是下面的zookeeper集群安装方法也可以参考此文. 不管你用什么方法,

Storm集群部署

一. 说明 Storm是一个分布式实时计算系统,Storm对于实时计算的意义就相当于Hadoop对于批量计算的意义.对于实时性较高的系统Storm是不错的选择.Hadoop提供了map, reduce原语,使批处理程序变得非常地简单和优美.同样,storm也为实时计算提供了一些简单优美的原语. 涉及的术语说明: Nimbus:Storm集群的主控节点,负责在Storm集群内分发代码,分配任务给工作机器,并且负责监控集群运行状态.其进程名为nimbus. Supervisor:Supervisor

Storm集群上的开发 ,任务计算输出到mysql数据库,集成jdbc(十)

storm集成jdbc,把计算结果保存到mysql中. 首先在mysql中建表 ,表的字段与输出的tuple的schema一致: create table result( word varchar(20), total int ); 编写一个连接提供器,用于获取mysql数据库连接: 需要引入jar :/usr/local/apps/apache-storm-1.0.3/external/storm-jdbc 的 storm-jdbc-1.0.3.jar package mystorm.word