Storm集群组成简介

以下资料均来自:https://github.com/nathanmarz/storm/wiki/Tutorial

Storm集群的组件

一个Storm集群特别类似于Hadoop集群,正如在Hadoop上面你运行“MapReduce作业”,在Strom上你运行“拓扑结构”,作业和拓扑结构它们是非常不一样的,一个最关键的不同时一个MapReduce作业最终是会结束的,然而一个拓扑进程信息是永远的(知道你关闭它)

Storm集群中有2种类型的节点,master节点和worker节点,master节点运行3个叫做“Nimbus”的类似于Hadoop的“JobTracker”的后台程序。Nimbus主要负责在集群中分配代码,分配任务到机器以及检测失效。

每一个worker节点运行一个后台程序叫做“Supervisor”,Supervisor监听分配到机器的任务以及开始和结束worker进程,必要时还注意是哪一个Nimbus分配给它的。每一个worker进程运行拓扑结构的一个子集,一个运行得拓扑结构由跨越很多机器的很多worker进程组成。

协调NimbusSupervisor是通过一个Zookeeper集群实现的,除此之外,Nimbus后台程序和Supervisor后台程序是快速失效和无状态的。所有的状态保持在Zookeeper中或者是本地磁盘中,这意味着你能关闭9Nimbus或者Supervisor而他们将会再次启动就像什么事情都没有发生过一样,这个设计使得Storm集群具有难以置信的稳定性。

拓扑结构

Storm上做实时计算,你创建的叫做拓扑结构,拓扑结构是计算的图。在拓扑结构中的每一个节点都包括处理逻辑,而在节点之间的连接表明了数据是怎样在节点之间进行传递的。

运行一个拓扑结构是直接的。首先你打包你全部的代码和约束到一个简单的jar包,然后你运行一个如下的命令:

storm jar all-my-code.jar backtype.storm.MyTopology arg1 arg2

这样就运行了backtype.storm.MyTopology 类并且传递了参数arg1arg2,这个类的主函数定义了拓扑结构并且提交到Nimbus,而storm jar包则关注连接到Nimbus和上传这个包

因为拓扑结构定义的只是简约结构,而且Nimbus是一个简约服务,你能使用任何编程语言创建和移交拓扑结构。以上的例子是采用最简单的方式也就是通过基于JVM的语言,看运行在生产集群上的拓扑结构去找更多关于开启和停止拓扑结构的信息。

Storm中最核心的抽象就是流,一个流是一个无穷的元组序列,Storm提供的基元将一个流通过一种分布式的并且可靠的方式转化为一个新的流。比如,你可以将一个微博流转化为趋势话题流。

最基本原始的Storm提供用来做流转换的是“Spouts”和“bolts”,Spoutsbolts有接口因而你实现接口去运行特化的应用层逻辑。

一个Spout是一个数据流的源头,例如,一个Spout可以从一个Kestrel序列读元组然后把它们发表成为一个流。或者Spout可以连接到Twitter API并且发出消息流。

一个bolt消耗输入流的数量,做一些处理,而且有可能发出新的流。复杂的流转换,就像从一个消息流计算出趋势话题流,需要多个步骤从而需要多个boltsBolts能做来自运行函数,过滤元组,流聚集,流合并,与数据库交互等的任何事情。

Spoutsbolts的网络被打包成一个拓扑结构,这个拓扑结构的顶级抽象就是你提交到Storm集群去执行。一个拓扑结构是一个流转换的图,图中的每一个节点是一个spout或者bolt。图中的每一条边表明了哪一个bolts是负责哪一个流。当一个spout或者bolt发出一个元组到一个流,它发送了元组到负责这个流的每一个bolt

你可能感兴趣的:(Storm集群组成简介)