分享

storm编程入门:基本概念

sstutu 发表于 2014-10-17 10:58:15 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 13696
本帖最后由 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)

欢迎加入about云群425860289432264021 ,云计算爱好者群,关注about云腾讯认证空间

已有(1)人评论

跳转到指定楼层
maizhu 发表于 2014-11-21 18:22:50
不错。不错不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条