一、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. 用定时器T0的中断控制8位LED闪烁

    #include<reg52.h> #define uchar unsigned char #define uint unsigned int uint i; void main() { ...

  2. LoadRunner监控数据库服务器

    使用LoadRunner的数据库服务器资源监控器,可以在场景或会话步骤运行期间监控DB2.Oracle.SQL Server或Sybase数据库的资源使用率.在场景或会话步骤运行期间,使用这些监控器可 ...

  3. display:inline-block的运用

    在实习中做专题时,遇到的一个问题:建立一个宽度很长的一个页面,里面包含许多列.或许许多人认为直接设置float:left:不就行了 但是这个有一个问题,你必须把外面的div的宽度设置的很长已满足大于所 ...

  4. QString与char*的相互转换

    原地址:http://blog.sina.com.cn/s/blog_5c70dfc80100r0nh.html 一.QString转char*   QString str; int num=0; s ...

  5. 在C++工程中main函数之前跑代码的廉价方法(使用全局变量和全局函数)

    // test.cpp : Defines the entry point for the console application. // #include "stdafx.h" ...

  6. mfc修改应用程序外观

    1.在窗口创建前修改窗体外观 在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)函数中修改,其中CREATESTRUCT结构中有诸如窗口大小 ...

  7. http协议与web本质

    当你在浏览器地址栏敲入“http://www.csdn.net/”,然后猛按回车,呈现在你面前的,将是csdn的首页了(这真是废话,你会认为这是理所当然的).作为一个开发者,尤其是web开发人员,我想 ...

  8. Python中的继承

    继承: 面向对象程序语言的一个重要特点是继承.继承提供了在已存在类的基础上创建新类的方法.继承的子类 拥有被继承的父类的所有方法,在此基础上,子类还可以添加自己的专有方法.继承是类的强有力的特点.一些 ...

  9. 转换函数CONVERSION_EXIT_TSTRN_OUTPUT

    CONVERSION_EXIT_TSTRN_OUTPUT 在路线表TVRO中字段TDVZND 运输提前时间,取出来的数值没有转换,需要此函数进行转换.如14400,000  转换后为14,400:00 ...

  10. 基础知识(10)- 部署应用程序和applet

    10.1 JAR文件  10.1.1 清单文件  10.1.2 可运行JAR文件  10.1.3 资源  10.1.4 密封 10.2 Java Web Start  10.2.1 沙箱  10.2. ...