本帖最后由 sstutu 于 2014-10-17 10:59 编辑
问题导读
1.Topologies有什么特点?
2.Spouts的作用是什么?涉及哪些函数?
3.Bolts的作用是什么?
扩展
4.你认为tuple与storm的关系是什么?
storm平台几个重要概念概述如下: 1 Topologies 拓扑,计算单元,类似hadoop中的job,整个执行环形单位,从Spouts中获取数据,然后依次在Bolts中执行,不会终止,会一直执行直到显示结束。
2 Spouts 数据源泉,获取数据,是整个拓扑数据的生产者。 主要涉及的方法如下: 1.nextTuple:发射新tuple到topology/无tuple时返回; 2.ack:storm检测到一个tuple被整个topology处理成功时调用; 3.fail:storm检测到一个tuple被整个topology处理失败时调用;
3 Bolts 具体任务的执行者,具体消息处理逻辑实现,处理过程概述如下: 1.Bolts处理一个输入的tuple; 2.发射0/多个tuple; 3.调用ack通知storm:已经处理过本tuple;
4 Streams消息流 具体的数据流以tuple来体现他的存在,可以指定一个唯一的id。
5消息分发策略 Stream groupings,为定义一个流的分发策略,也就是说Spouts产生的数据怎么向Bolts流,目前支持六种分发策略: 1. Shuffle Grouping: 随机分组, 随机派发stream里面的tuple, 保证每个bolt接收到的tuple数目相同. 2. Fields Grouping:按字段分组, 比如按userid来分组, 具有同样userid的tuple会被分到相同的Bolts, 而不同的userid则会被分配到不同的Bolts. 3. All Grouping: 广播发送, 对于每一个tuple, 所有的Bolts都会收到. 4. Global Grouping: 全局分组,这个tuple被分配到storm中的一个bolt的其中一个task.再具体一点就是分配给id值最低的那个task. 5. Non Grouping: 不分组,意思是说stream不关心到底谁会收到它的tuple.目前他和Shuffle grouping是一样的效果,有点不同的是storm会把这个bolt放到这个bolt的订阅者同一个线程去执行. 6. Direct Grouping: 直接分组,这是一种比较特别的分组方法,用这种分组意味着消息的发送者由消息接收者的哪个task处理这个消息.只有被声明为Direct Stream的消息流可以声明这种分组方法.而且这种消息tuple必须使用emitDirect方法来发射.消息处理者可以通过TopologyContext来或者处理它的消息的taskid (OutputCollector.emit方法也会返回taskid)
|