Storm 学习笔记 (二)菜鸟乐园

Storm计算模型

Topology DAG有向无环图的实现

----对于storm实时计算逻辑的一种封装

    由一系列通过   数据流   相互关联的spout,Bolt组成的拓扑结构

生命周期:此拓扑只要启动,一直会在集群中运行直到手动kill(区别于MapReduce当中的job,job在计算完成后就会终止)

Tuple  元组

Storm中最小数据组成单元

Stream--数据流

从spout中不断传递数据给Bolt,以及一个Bolt传递给下一个Bolt,所形成的这些数据通道叫作stream

stream 声明时候需要给一个id,默认为default

实际使用时候大多使用单一数据流,此时不需要单独指定Stream1 id

Spout---数据源

  图中数据源的来源,一般指定外部的数据源  读取 元组 Tuple 发送到 Topology中

 一个Spout可以发送多个数据源

含有3个重要方法

1 OutputFieldsDeclarer中的declare方法声明定义所发送数据流的类型,便于bolt接收

2 SpoutOutputCollector中的emit方法指定stream id 后 发送到bolt

3 Spout最核心的方法 nextTuple,这个方法会被storm线程不断调用,主动从数据源拉取数据在通过emit方法生成Tuple发送给下一个Bolt计算

Bolt---数据流处理组件

所有的数据处理都由Bolt完成 ,一个到多个。一个Bolt也可以发送多个数据流stream。

Bolt里最核心的方法是 execute 方法,这个方法负责接收到一个Tulp数据然后实现核心的业务逻辑

Stream Grouping ---数据流分组 (即数据分发策略)

一共8种,但是我一般就用过1和2,其他不太常用

1  Shuffle Grouping

    轮询,平均分配

随机派发Stream里的tuple,保证每个bolt task 接收到的tuple数量大致相同

2   Fields Grouping  个人感觉非常有用,常用于ETL Extract-Transform-Load

按字段分组,比如。按照“user_id”字段分组,具有相同的user_id的Tuple会被分到同一个Bolt中处理

3 All Grouping

广播发送,对于每一个tuple,所有的Bolts都会收到

4 Global Grouping

全局分组,把tuple分散给task id最低的task,其实可以实现间接的HA

5 None Grouping

不分组,目前看这个效果和shuffle grouping差不多,不同的一点是storm会把使用none grouping

的这个Bolt放到这个Bolt的订阅者同一个线程里去执行

6 Direct Grouping

指向性分组,使用这种分组意味着tuple的发送者指定消息的接受者,指定哪个task处理tuple。

只有被声明为Direct Stream的消息流可以声明这种分组方法。

7 Local or shuffle grouping

  本地或者随机分组。如果目标bolt有一个或者多个task与源bolt的task在同一个工作进程中,tuple

将会被随机发送给这些同进程中的tasks。否则和普通的Shuffle Grouping一样

8  CustomGrouping

    自定义,相当于MapReduce那里自己去实现一个partition。



未完待续!!!!!!!












猜你喜欢

转载自blog.csdn.net/paulfrank_zhang/article/details/80255554