Storm 基础知识

分布式的实时计算框架,storm对于实时计算的意义类似于hadoop对于批处理的意义。

Storm的适用场景:
1.流数据处理:storm可以用来处理流式数据,处理之后将结果写到某个存入中去。

2.持续计算:连续发送数据到客户端,使它们能够实时更新并显示结果,如网站指标

3.分布式RPC:由于storm的处理组件是分布式的,而且处理延迟极低,所以可以作为一个通用的分布式rpc框架来使用。

我们的搜索引擎本身也是一个分布式rpc系统。

storm关注的是数据的一次写入多次处理,storm的job运行起来是持续不断的。

Hadoop关注的是数据的一次写入,多次查询,使用。job执行完就结束了。

  hadoop storm
组件角色 jobtracker
tasktracker
child
Nimbus
Supervisor
Worker
应用名称 Job Topology
组件接口 Map/Reduce Spout/Bolt

Storm的特点:

  • 编程模型简单
  • 可扩展
  • 高可靠性
  • 高容错性
  • 支持多种语言编程

支持本地模式运行和远程模式。

Storm集群架构:

image

 

Topology(拓扑)

storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构,一个Topology是由Spouts和bolts组成的图。

image

Topology的定义是一个Thrift结构,幵且Nimbus就是一个Thrift服务, 你可以提交由
任何询言创建的topology。

Tuple

可以认为是一个Map,但要求此数据类型是可以序列化的,这点和Hadoop的一样,其实分布式开发都需要注意这点。

Field1:String Filed2:int field3:string Filed:customerobj

一个没有边界的,源源不断的连续的Tuple序列就组成了Stream.

Spout

这是storm中消息的生产者,它会有一个NextTuple方法,一直产生Tuple形成流,它可以读成取文件生成Tuple,也可以从Kafka里面读取消息生成Tuple.

通常会从外部数据源(消息队列,数据库)读取数据,封闭成Tuple,发送到Stream中。

Bolt

Topology中所有的处理都是由它完成,即所有的消息处理逻辑都封装在里面。可以完成:过滤,聚合,访问文件数据库等。

它有一个Execute(Tuple Input)方法,处理spout或其他bolt传过来的数据,处理完并输出到下游。

Stream Grouping

定义了tuple如何被传送。从spout到bolt或bolt2bolt之间的传送方式。

1.随机分组(shuffle grouping)随机分发tuple到bolt,保证每个任务获得相等数量的tuple.

2.字段分组(Fields grouping)根据指定的字段分割数据流,并分组。例如,wordcount任务中,根据word进行分组计算。

3.全部分组(All grouping):tuple被复制到bolt的所有任务。这种类型要慎用。

4.全局分组(Global grouping):全部流都分配到bolt的同一个任务。分配给ID最小的那个Task.

5.无分组(None Grouping)暂时等于随机分组

6.直接分组(Direct grouping)由tuple生产者决定去哪里。

7.本地或随机分组(Local or Shuffle grouping)如果目标bolt有一个某多个任务在同一个worker进程中,tuples会随机分发给这些任务,否则就随机分组。

自定义分组,实现CustomStreamGrouping接口来定制自己需要的分组。

运行中的topology主要三个组件组成:

worker process(进程)Executors (线程)和tasks

Worker:

运行具体处理组件的进程。一个拓扑可能会在一个或多个worker里面执行,每一个worker是一个物理JVM并且执行整个拓扑的一部分,Storm会尽量均匀地将工作分配给所有的worker.

Executor:每一个executor对应一个线程,一个executor是一个worker进程生成的一个线程。它可能运行着一个相同的组件的一个或多个Task.

Task:每一个spout或bolt会被当作很多task在整个集群中运行。

posted on 2015-04-12 09:42  tneduts  阅读(394)  评论(0编辑  收藏  举报

导航