storm二之storm核心概念

来源:互联网 发布:语义搜索python 编辑:程序博客网 时间:2024/04/30 08:51

Apache storm——核心概念

Apache Storm reads raw stream of real-time data from one end and passes it through a sequence of small processing units and output the processed / useful information at the other end.

Apache storm从一个终端实时数据,经过一系列小处理单元处理后,输出处理过的处理信息或者有用信息到一个终端

下图描述了Apache storm的核心概念

 

现在让我们看看Apache storm的组件:

---------

Tuple




---------

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

元组Tuplestorm主要的数据结构。

这是一个有序列表元素。

默认情况下,Tuple支持所有数据类型。

一般来说,Tuple描述的是传递给storm集群的,逗号分隔的一系列

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Stream

---------

Stream是一个无序的Tuple序列。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Spouts




----------

SpoutsStream的来源。

一般来说,Storm如Twitter StreamAPI,Apache kafka队列,Kestrel队列等原始数据来源接受输入数据。当然你可以写spouts指定数据源读取数据。

“ISpout”是实现spouts核心接口。

一些特定的接口IRichSpout、BaseRichSpout KafkaSpout等等。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Bolts






----------

Boltsstorm逻辑处理单元。

Spouts传递数据给bolts,经过bolts处理后产生新的输出流。

Bolts与数据源和数据库进行交互,可以执行filtering(过滤), aggregation(聚合), joining(连接)操作

Bolt接收数据并能够发送数据到一个或多个Bolt

“IBolt”是实现Bolts核心接口。

其他一些常见的接口是IRichBolt,IBasicBolt等等。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

让我们来“Twitter Analysis,一个实时处理数据的例子,看看它怎么样使用Apache storm

下图描述了“Twitter Analysis例子结构

 

 

“Twitter Analysis”的输入来自Twitter StreamAPI。

Spout使用Twitter StreamAPI读取用户的tweet并且作为tuples输出。

Spout中的一个元组包含一个twitter用户名和一个逗号分隔推特数据

然后,这个tuple Stream会指向Bolt,bolttweet的分割成单个的词,计算字数,然后将信息持久化到一个配置数据源。

最后,我们可以很容易地通过查询数据源中的数据来得到结果。

Topology

Spoutsbolts连接在一起,形成一个topology

实时应用程序逻辑指定stormtopology

简单的讲,一个topology是一个顶点计算边缘数据流有向图,。

一个简单的topologyspouts开始

Spout发送数据到一个或多个Bolt

Bolt代表一个topology节点最小的逻辑处理单元,,Bolt的输出可以作为另一个Bolt输入。

Storm维持topology一直运行,直到你停止topology

Apache的主要任务是运行topology,并且能够在给定的时间运行任意数量的topology

 

 

Tasks(任务)

现在你对spoutsbolts有了基本上的认识,

他们是topology中最小的逻辑处理单元,一个topology通常有一个spout和多个bolt构成。

他们在一个topology中按照一定的顺序执行以保证逻辑处理的正确和成功。

storm,执行的topology中的每一个spoutbolt被称为Tasks任务。

简单的说,task是被执行的每一个spoutbolt

在给定的时间,每个spoutbolt可以运行在多个实例多个单独的线程

 

Workers(工作节点)

一个topology以分布式的方式运行在多个工作节点

Storm均匀的分配任务在所有的工作节点上

工作节点的角色是监听任务,并且在每一个新的任务到来时启动或停止处理过程

 

 

Stream Grouping(流分租)

Storm的数据流流向是从一个spout到一个Bolt,或者是一个Bolt到另一个Bolt.

流分组控制tupletopology按照怎样的规则传递帮助我们理解topology中的tuple

有四个内置分组解释如下

Shuffle Grouping

shuffle grouping,同等数量的tuple随机分布到所有的bolt工作节点上执行

下图描述了shuffle grouping结构

 

 

 

 

 

 

 

 

 

 

Field Grouping

Field Grouping 中,tuple中具有相同值的字段被分在一起,剩余的tuple被则被分到其他不同的bolt上

然后,拥有相同的字段值tuple被发送相同的worker节点上执行Bolt处理

例如,如果Stream按照字段word分组,那么具有相同字符串Hellotuple就会传递到相同的worker节点上

下面的图显示了字段分组是如何工作的

 

 

 

 

Global Grouping

所有的流可以进行分组并发送给一个Bolt处理

这个分组发送元组生成的源到一个目标实例的所有实例(具体来说,选择最低的工人ID)。

这个分组将source的所有实例产生的tuple发送到一个单一的实例上(尤其是选择ID最低的worker)

 

 

 

All Grouping

All Grouping 发送tuple一个副本所有的接收Bolt实例。

这样的分组是用于发送信号Bolts

All grouping对连接操作很有利。


0 0
原创粉丝点击