112 Storm单词技术案例

简介: 112 Storm单词技术案例
1、功能说明

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

整个topology分为三个部分:

  • RandomSentenceSpout:数据源,在已知的英文句子中,随机发送一条句子出去。
  • SplitSentenceBolt:负责将单行文本记录(句子)切分成单词
  • WordCountBolt:负责对单词的频率进行累加
2、项目主要流程

3、RandomSentenceSpout的实现及生命周期

4、SplitSentenceBolt的实现及生命周期

5、WordCountBolt的实现及生命周期

6、Stream Grouping详解

Storm里面有7种类型的stream grouping

  • Shuffle Grouping: 随机分组, 随机派发stream里面的tuple,保证每个bolt接收到的tuple数目大致相同。
  • Fields Grouping: 按字段分组,比如按userid来分组,具有同样userid的tuple会被分到相同的Bolts里的一个task,而不同的userid则会被分配到不同的bolts里的task。
  • All Grouping: 广播发送,对于每一个tuple,所有的bolts都会收到。
  • Global Grouping: 全局分组, 这个tuple被分配到storm中的一个bolt的其中一个task。再具体一点就是分配给id值最低的那个task。
  • Non Grouping: 不分组,这stream grouping个分组的意思是说stream不关心到底谁会收到它的tuple。目前这种分组和Shuffle grouping是一样的效果, 有一点不同的是storm会把这个bolt放到这个bolt的订阅者同一个线程里面去执行。
  • Direct Grouping: 直接分组, 这是一种比较特别的分组方法,用这种分组意味着消息的发送者指定由消息接收者的哪个task处理这个消息。只有被声明为Direct Stream的消息流可以声明这种分组方法。而且这种消息tuple必须使用emitDirect方法来发射。消息处理者可以通过TopologyContext来获取处理它的消息的task的id (OutputCollector.emit方法也会返回task的id)。
  • Local or shuffle grouping: 如果目标bolt有一个或者多个task在同一个工作进程中,tuple将会被随机发生给这些tasks。否则,和普通的Shuffle Grouping行为一致。
目录
相关文章
|
开发工具 git Windows
VSCode下载与安装使用教程【超详细讲解】
VSCode下载与安装使用教程【超详细讲解】
4881 0
VSCode下载与安装使用教程【超详细讲解】
|
供应链 物联网 区块链
未来已来:探索新技术趋势与应用的无限可能
随着科技的飞速发展,新兴技术如区块链、物联网、虚拟现实等正在逐渐改变我们的生活和工作方式。本文将深入探讨这些技术的发展趋势和应用场景,带你领略未来的无限可能。
152 1
|
缓存 JavaScript
|
存储 Java 对象存储
Java static 它为什么叫静态?一语道破天机!
那今天咱们就分析分析,搞定它! 为了解决上边的问题,咱们再抛出一个问题:有静肯定就有动啊,那这个“静”是相对于谁来说的? 要讲明白这个,首先需要知道Java中 类和对象之间的关系 类是对某一类具有共同特征的事物的抽象,对象是根据类产生出的具体实例。 请注意:这里说的共同特征是指具有共同的属性(字段)和共同的行为(方法),绝对不是指这些事物的数据都相同 举个例子:张三和李四都属于学生。这里的张三、李四就是具体的实例对象;学生就是一个抽象出来的具有共同特性的事物,学生这类事物都有都有班级、姓名、年龄、性别等属性,所以学生是个类。
225 0
|
11天前
|
数据采集 人工智能 安全