一、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的执行情况例如以下图所看到的:
     );

2.2.2 设置task的数量

     通过setNumTasks()方法来指定一个组件的tasks数量。
     以下我们为SplitSentenceBolt 设置4个tasks和2个executors,这种话每一个executor线程将被分配运行4/2=2个tasks,然后再为WordCountBolt分配4个task,每一个task由一个executor负责运行。其Topology例如以下图所看到的:

    ).shuffleGrouping(SENTENCE_SPOUT_ID);

).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 













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

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

    在进群生产环境下运行Topology和在本地模式下运行非常相似.下面是步骤: 1.定义Topology(如果使用Java开发语言,则使用TopologyBuilder来创建) 2.使用StormSub ...

  2. Storm集群组件和编程模型

     Storm工作原理: Storm是一个开源的分布式实时计算系统,常被称为流式计算框架.什么是流式计算呢?通俗来讲,流式计算顾名思义:数据流源源不断的来,一边来,一边计算结果,再进入下一个流. 比 ...

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

    作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2012/11/30/how ...

  4. Storm集群安装详解

    storm有两种操作模式: 本地模式和远程模式. 本地模式:你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 远端模式:你提交的topology会在一个集群的机器 ...

  5. Storm入门教程 第三章Storm集群安装部署步骤、storm开发环境

    一. Storm集群组件 Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node).其分别对应的角色如下: 主控节点(Master Node)上运行一个被称为N ...

  6. Storm集群安装部署步骤

    本文以Twitter Storm官方Wiki为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章节以"注意事项"的形式给出. 1. Sto ...

  7. storm集群架构

    一.storm何许人也? Storm 是Twitter的一个开源框架.Storm一个分布式的.容错的实时计算系统,它被托管在GitHub上,遵循 Eclipse Public License 1.0. ...

  8. Storm 集群

    Apache Storm Storm是一个分布式的,可靠的,容错的数据流处理系统.Storm集群的输入流由一个被称作spout的组件管理,spout把数据传递给bolt,bolt要么把数据保存到某种存 ...

  9. storm集群相关资料

    1. Storm集群组件 Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node).其分别对应的角色如下: 主控节点(Master Node)上运行一个被称为N ...

随机推荐

  1. HDOJ 5088 Revenge of Nim II 位运算

    位运算.. .. Revenge of Nim II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  2. C#面向对象1 类 以及 类的继承(new、ovverride)

    类 的典型代码============================== 包括 属性及其判断赋值  方法  构造函数及其重载 )                 {                  ...

  3. linux scp传文件

    一.输入 scp 201207.tar.gz root@192.1001.122:/backup 二.输入密码:abc123 注解: scp 201207.tar.gz :将要传输的文件 root : ...

  4. vim: vim快捷键

    0. 搜索字符串: 精确匹配查找单词 如果你输入 "/the",你也可能找到 "there". 要找到以 "the" 结尾的单词,可以用:/ ...

  5. PL/SQL(二):变量

    变量 标识符定义 PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同.要求和限制有: 个字符. )首字符必须为字母. )不区分大小写. )不能使用SQL保留字. )对标识符的命名最好遵循 ...

  6. 64位win7旗舰版搭建apache+php+mysql开发环境[转]

      我建议把apache.php.mysql都安装在一个文件夹中,比如:web/apache.web/php.web/mysql 1.安装apache2.2.25,请查看win7下安装VC9版本的ap ...

  7. 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(上)

    由于本人愚钝,整合ssm框架真是费劲了全身的力气,所以打算写下这篇文章,一来是对整个过程进行一个回顾,二来是方便有像我一样的笨鸟看过这篇文章后对其有所帮助,如果本文中有不对的地方,也请大神们指教. 一 ...

  8. JAVA 操作 DBF 文件数据库

    1.依赖夹包 javadbf-[].4.1.jar jconn3.jar 2.添加属性文件 jdbc.properties jdbc.driverClassName=com.sybase.jdbc3. ...

  9. spring mvc controller json数据

    项目中遇到个批处理,需要前台传递一个json格式对象数组,如下:var data={   "wos":[{"id":1,"satisfaction&q ...

  10. [LeetCode] Print All Combinations of a Number as a Sum of Candidate Numbers

    题目连接:http://leetcode.com/2010/09/print-all-combinations-of-number-as-sum.html 题目分析: 由于这里说明了输入是升序的,当然 ...