Strom学习(一)

来源:互联网 发布:小米笔记本安装软件 编辑:程序博客网 时间:2024/06/05 19:04

整理自

http://www.csdn.net/article/2014-08-04/2821018/2

Storm将计算逻辑成为Topology,其中Spout是Topology的数据源,这个数据源可能是文件系统的某个日志,也可能是MessageQueue的某个消息队列,也有可能是数据库的某个表等等;Bolt负责数据的护理。Bolt有可能由另外两个Bolt的join而来。

而Storm最核心的抽象Streaming就是连接Spout,Bolt以及Bolt与Bolt之间的数据流。而数据流的组成单位就是Tuple(元组),这个Tuple可能由多个Fields构成,每个Field的含义都在Bolt的定义的时候制定。也就是说,对于一个Bolt来说,Tuple的格式是定义好的。




Storm的消息传递      

对于Storm来说,他的消息分发机制是在定义Topology的时候就显式定义好的。也就是说,应用程序的开发者需要清楚的定义各个Bolts之间的关系,下游的Bolt是以什么样的方式获取上游的Bolt发出的Tuple。Storm有六种消息分发模式:

  1. Shuffle Grouping: 随机分组,Storm会尽量把数据平均分发到下游Bolt中。
  2. Fields Grouping:按字段分组, 比如按userid来分组, 具有同样userid的tuple会被分到相同的Bolt。这个对于类似于WordCount这种应用非常有帮助。
  3. All Grouping: 广播, 对于每一个Tuple, 所有的Bolts都会收到。这种分发模式要慎用,会造成资源的极大浪费。
  4. Global Grouping: 全局分组, 这个Tuple被分配到storm中的一个bolt的其中一个task。这个对于实现事务性的Topology非常有用。
  5. Non Grouping: 不分组, 这个分组的意思是说stream不关心到底谁会收到它的tuple。目前这种分组和Shuffle grouping是一样的效果, 有一点不同的是storm会把这个bolt放到这个bolt的订阅者同一个线程里面去执行。
  6. Direct Grouping: 直接分组,  这是一种比较特别的分组方法,用这种分组意味着消息的发送者指定由消息接收者的哪个task处理这个消息。

0 0
原创粉丝点击