Storm集群架构

61 篇文章 6 订阅

2016-01-27 00:39:30 11,927 1
Storm集群,利用了分布式系统中经典的master/slave架构。以下显示的是一个Storm集群,其中master节点为Nimbus,slave节点有四个,称之为supervisor。

QQ截图20160127003404.png

在传统的master/slave架构中,都是master节点负责任务的接受、分配、监控等管理任务,从节点负责任务的执行。

总的来说,storm中的主从架构,基本上也符合这个规则。(以下纯属个人理解)不过storm对这个master/slave架构有着一定的扩展:

主节点Nimbus依然是负责在集群分发任务(Topology)的代码以及监控等。

从节点Supervisor的任务有点改变,其并不是自己直接执行任务。在接受到一个任务的时候,Supervisor会启动一个或多个进程(称之为Worker),来处理任务。所以实际上,任务最终都是分配到了worker上。

默认情况下,一个supervisor最多可以启动4个进程,也就是启动四个worker,当然我们也可以进行修改。这样设计的目的实际上是为了充分利用现代多核CPU的特性,storm是计算密集型的框架,一台机器只启动一个进程太浪费了,因此supervisor同时启动多个进程(worker)来进行处理任务。事实上,你可以这样理解,nimbus分配任务时,它是不关心有几个supervisor的,其关心的是有多少个worker,因为任务(Topology)最终都是通过worker来执行的。假设我们向Storm集群中提交一个Topology,指定由四个worker来执行。那么nimbus最终就会分配四个worker来执行这个任务,至于这个4个worker是分配在一个还是多个supervisor节点上,nimbus是不关心的。

让我们用一个案例来进行更加详细的说明:

假设我们现在有一个Storm集群,一台nimbus和4台supervisor,默认情况下,一个supervisor可以启动4个worker。因此如下图所示,我们的集群中现在有16个worker。现在我们向这个集群中提交一个Topology,指定要有4个worker来执行。图中星号标记的就是使用到的worker。

Nimbus.png

从图中,我们可以看到这四个worker分配在supervisor1(1个worker)、supervisor2(2个worker)和supervisor3(1个worker)上。可以看到,并不是一个supervisor分配一个worker。这是因为nimbus是对Topology的任务分配,是针对worker来的,我们指定了Topology要四个worker,然后我们总共有16个worker,storm只要从这个16个worker中选择四个worker就行了,并不会平均分配。这就有可能导致,选择出来的worker中,可能有些是位于同一个supervisor中的,例如案例中就有2个worker位于supervisor2上,而另外一些supervisor可能不需要执行任务,例如supervisor4。

要注意的是:一个worker同时只能运行一个Topology。如果此时我们想提交另外一个Topology,不管指定使用几个worker来执行,都只能在剩余的12个worker中来选择了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值