Storm单词技术案例

本文详细介绍了如何使用Storm设计一个拓扑(topology)来统计文档中单词的出现频率。拓扑包括RandomSentenceSpout作为数据源,SplitSentenceBolt用于单词分割,以及WordcountBolt进行频率累加。此外,还全面解析了Storm中的七种StreamGrouping类型,如ShuffleGrouping、FieldsGrouping等,及其在任务分配中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能说明:

设计一个topology,来实现对文档里面的单词出现的频率进行统计

整个totopolgy分为三个部分:

1. RandomSentenceSpout:数据源,在已知的英文句子中,随机发送一条句子出去。

2. SplitSentenceBolt : 负责将单行文本记录(句子)切分为单词.

3. WordcountBolt :负责对单词的频率进行累加

7.6、Stream Grouping详解

Storm里面有7种类型的stream grouping

  1. Shuffle Grouping: 随机分组, 随机派发stream里面的tuple,保证每个bolt接收到的tuple数目大致相同。

  2. Fields Grouping:按字段分组,比如按userid来分组,具有同样userid的tuple会被分到相同的Bolts里的一个task,而不同的userid则会被分配到不同的bolts里的task。

  3. All Grouping:广播发送,对于每一个tuple,所有的bolts都会收到。

  4. Global Grouping:全局分组, 这个tuple被分配到storm中的一个bolt的其中一个task。再具体一点就是分配给id值最低的那个task。

  5. Non Grouping:不分组,这stream grouping个分组的意思是说stream不关心到底谁会收到它的tuple。目前这种分组和Shuffle grouping是一样的效果, 有一点不同的是storm会把这个bolt放到这个bolt的订阅者同一个线程里面去执行。

  6. Direct Grouping: 直接分组, 这是一种比较特别的分组方法,用这种分组意味着消息的发送者指定由消息接收者的哪个task处理这个消息。只有被声明为Direct Stream的消息流可以声明这种分组方法。而且这种消息tuple必须使用emitDirect方法来发射。消息处理者可以通过TopologyContext来获取处理它的消息的task的id (OutputCollector.emit方法也会返回task的id)。

  7. Local or shuffle grouping:如果目标bolt有一个或者多个task在同一个工作进程中,tuple将会被随机发生给这些tasks。否则,和普通的Shuffle Grouping行为一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值