注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

being23

写给未来的自己

 
 
 

日志

 
 
关于我

真正的坚定,就是找到力量去做自己喜欢的事情,并为之努力,这样才会觉得生活是幸福的。

网易考拉推荐

STORM拓扑的并行  

2014-04-20 13:26:50|  分类: work@oppo |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这周在做下载数据实时分析,使用的是storm这个流处理框架。期间对并行相关的几个概念不甚清楚,在项目的wiki里面找到这么一篇文章,Understanding the parallelism of a Storm topology,讲得还是蛮清楚的。

worker process, executors and tasks


在storm集群中,运行拓扑需要下面三个不同的entities:

  1. Worker processer
  2. Executors (threads)
  3. Tasks

他们之间的关系见下图: 

STORM拓扑的并行 - 柒.smilence - being23

 


 

worker process负责执行拓扑的一个子集。worker process属于某个特定的拓扑,用于执行该拓扑的一个或多个组件(spouts或者bolts)的一个或多个executors。在storm集群中,一个运行的拓扑由运行在多台机器上的许多process组成。

executor是由worker process产生的一个thread。它负责执行同一个组件(spout或者bolt)的一个或多个task。

task负责实际的数据处理——each spout or bolt that you implement in your code executes as many tasks across the cluster. 在拓扑生命周期内,每个组件的task数目是不变的,不过executor数目是随时变化的。这意味着有下面的条件成立:#threads <= #tasks。默认情况下,task数与executor数一致,即每个thread对应一个task。

配置拓扑并行度


注意,在storm中术语“parallelism”专用来描述所谓的parallelism hint,也就是一个组件的初始executor(threads)数目。在本文中,我们使用一般意义的“parallelism”来表示executors,worker processes和tasks数目。

接下来的部分会介绍不同的配置选项以及如何在代码中设置。设置方法有很多种,这里只是给出了一部分。Storm currently has the following order of precedence for configuration settings: defaults.yaml < storm.yaml < topology-specific configuration < internal component-specific configuration < external component-specific configuration.

Number of worker processes

Number of executors(threads)

Number of tasks

下面是如何设置的一段代码示例:

topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
               .setNumTasks(4)
               .shuffleGrouping("blue-spout);

上面的代码会运行GreenBolt,初始executor数目为2,带有4个相关的tasks。每个executor(thread)会执行两个task。如果没有明确配置task数目,默认每个executor一个task。

Example of a running topology


下面给出一个简单的拓扑在实际中是什么样的。这个拓扑由三个组件构成:一个BlueSpout以及两个GreenBoltYellowBolt。组件间的连接方式是BlueSpout将它的输出发给GreenBoltGreenBolt再将输出发给YellowBolt

STORM拓扑的并行 - 柒.smilence - being23

The GreenBolt was configured as per the code snippet above,而BlueSpoutYellowBolt只设置了parallelism hint(executor数)。相关代码如下:

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

当然了strom也有其他的选项用来控制拓扑的并行程度,包括:

如何修改运行中拓扑的并行度


Storm有一个有趣的特性,就是不必重启集群或者拓扑,就可以调整worker process和/或者executors数目。这称为rebalancing。

rebalance一个拓扑有两种方式:

  1. 使用Storm web UI
  2. 使用CLI工具,具体如下

这里是使用CLI工具的示例:

# 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

2014-04-19@桃园公寓


  评论这张
 
阅读(484)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017