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

一、Storm中运行的组件

     我们知道,Storm的强大之处就是可以很容易地在集群中横向拓展它的计算能力,它会把整个运算过程分割成多个独立的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-09-20 18:24:48

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

spark-java怎么在Spark集群中运行?

问题描述 java怎么在Spark集群中运行? 本人初学者,现在已经成功跑了本地的SparkPi程序.现有条件: windows8.1: eclipse: putty以及root和密码:Master主机IP:两台slave的IP. 不知道下一步该怎么做了,请问SparkPi怎么在Spark集群中运行呢?我查了一下,是不是要导出jar包,然后在putty中用spark-submit来运行?如果是的话,具体怎么操作呢? 多谢相助! 解决方案 对,搭建好集群后,通过spark submit来提交任务让

《Hadoop MapReduce实战手册》一第1章 搭建Hadoop并在集群中运行

第1章 搭建Hadoop并在集群中运行 Hadoop MapReduce实战手册本章将学习以下内容: 在你的机器上安装Hadoop 写WordCountMapReduce示例程序,打包并使用独立的Hadoop运行它 给WordCountMapReduce程序增加combiner步骤 安装HDFS 使用HDFS监控UI HDFS的基本命令行文件操作 在分布式集群环境中设置Hadoop 在分布式集群环境中运行WordCount程序 使用MapReduce监控UI

storm集群中链接不上工作节点

问题描述 分别用独立终端启动的nimbus,2个supervisor.storm0.9.3:storm.yaml如下:storm.zookeeper.servers:-"lmn"-"cwc"-"slave3"nimbus.host:"lmn"storm.zookeeper.port:2181storm.local.dir:"/usr/local/apache-storm-0.9.3/workdir"supe

Storm集群安装部署步骤

开始学习Storm,本文主要记录Storm集群安装部署步骤,不包括对Storm的介绍. 安装storm集群,需要依赖以下组件: Zookeeper Python Zeromq Storm JDK JZMQ 故安装过程根据上面的组件分为以下几步: 安装JDK 安装Zookeeper集群 安装Python及依赖 安装Storm 另外,操作系统环境为:Centos6.4,安装用户为:root. 1. 安装JDK 安装jdk有很多方法,可以参考文博客使用yum安装CDH Hadoop集群中的jdk安装步

《Storm分布式实时计算模式》——2.1 Storm集群的框架

第2章 配置Storm集群 在本章中你将深入理解Storm的技术栈,它的软件依赖,以及搭建和部署Storm集群的过程.我们首先会在伪分布式模式下安装Storm,所有的组件都安装在同一台机器上,而不是在多台机器上.一旦你了解了安装和配置Storm的基本步骤,我们就可以通过Puppet这个工具进行自动化的安装,这样的话部署多节点的集群可以节省大量的时间和精力. 本章包括以下内容: 组成Storm集群的不同组件和服务 Storm的技术栈 在Linux上安装和配置Storm Storm的配置参数 Sto

《Storm企业级应用:实战、运维和调优》——2.3 安装部署Storm集群

2.3 安装部署Storm集群 Storm的安装.部署过程分为安装依赖.安装Storm.启动和查看安装等几个部分.其中,前两部分内容在三个节点上都是一样的,只要在启动时区分开角色即可.接下来将讲解Storm集群的安装过程.2.3.1 安装Storm依赖库 在Nimbus和Supervisor的节点上安装Storm时,都需要安装相关的依赖库,具体如下: ZeroMQ 2.1.7. JZMQ. 其中,ZeroMQ推荐使用2.1.7版本,请勿使用2.1.10版本.官方解释是因为该版本的一些严重Bug会

开源容器集群管理系统Kubernetes架构及组件介绍

Together we will ensure that Kubernetes is a strong and open container management framework for any application and in any environment, whether in a private, public or hybrid cloud. --Urs Hölzle, Google Kubernetes 作为Docker生态圈中重要一员,是Google多年大规模容器管理技术的

一:Storm集群环境搭建

第一:storm集群环境准备及部署[1]硬件环境准备--->机器数量>=3--->网卡>=1--->内存:尽可能大--->硬盘:无额外需求[2]软件环境准备--->CentOS-6.0-x86_64系统环境--->三台地址--->zookeeper和storm公用物理环境   第二:节点环境查看 第三:节点之间用ip-->别名绑定/etc/hosts,然后用ping 别名 进行测试 第四:zookeeper集群环境搭建第五:Storm集群环境搭建

Storm集群部署

在线下载安装包 wget http://124.202.164.6/files/1139000006794ECA/apache.fayea.com/storm/apache-storm-0.9.5/apache-storm-0.9.5.tar.gz 解压安装包 tar -zxvf apache-storm-0.9.5.tar.gz -C /export/servers/ cd /export/servers/ 创建软连接 快捷方式 ln -s apache-storm-0.9.5 storm 修