STORM入门之(Stream Groupings分组方式)
来源:互联网 发布:linux qt 中文不显示 编辑:程序博客网 时间:2024/06/05 23:49
StormTopology分组方式
Stream Groupings
Stream Grouping定义了一个流在Bolt任务间该如何被切分。这里有Storm提供的6个Stream Grouping类型
1. 随机分组(Shuffle grouping)
随机分发tuple到Bolt的任务,保证每个任务获得相等数量的tuple。
2. 字段分组(Fields grouping)
根据指定字段分割数据流,并分组。例如,根据“user-id”字段,相同“user-id”的元组总是分发到同一个任务,不同“user-id”的元组可能分发到不同的任务。
3. 全部分组(All grouping)
tuple被复制到bolt的所有任务。这种类型需要谨慎使用。
4. 全局分组(Global grouping)
全部流都分配到bolt的同一个任务。明确地说,是分配给ID最小的那个task。
5. 无分组(None grouping)
你不需要关心流是如何分组。目前,无分组等效于随机分组。但最终,Storm将把无分组的Bolts放到Bolts或Spouts订阅它们的同一线程去执行(如果可能)。
6. 直接分组(Direct grouping)
这是一个特别的分组类型。元组生产者决定tuple由哪个元组处理者任务接收。当然还可以实现CustomStreamGroupimg接口来定制自己需要的分组。
TridentToplogy分组方式
我们注意到上面的例子中用到了shuffle(),shuffle()是一个重定向操作。那什么是重定向操作呢?重定向定义了我们的tuple如何被route到下一处理层,当然不同的层之间可能会有不同的并行度,shuffle()的作用是把tuple随机的route下一层的线程中,而partitionBy()则根据我们的指定字段按照一致性哈希算法route到下一层的线程中,也就是说,如果我们用partitionBy()的话,同一个字段名的tuple会被route到同一个线程中。 比如,如果我们把上面代码中的shuffle()改成partitionBy(new Fields("actor")),猜一下结果会怎样?
I am partition [2] and I have kept a tweet by: dave
I am partition [2] and I have kept a tweet by: dave
I am partition [2] and I have kept a tweet by: dave
I am partition [2] and I have kept a tweet by: dave
测试结果正如我们上面描述的那样,相同字段的tuple被route到了同一个partition中。
重定向操作有如下几种:
shuffle:通过随机分配算法来均衡tuple到各个分区
broadcast:每个tuple都被广播到所有的分区,这种方式在drcp时非常有用,比如在每个分区上做stateQuery
partitionBy:根据指定的字段列表进行划分,具体做法是用指定字段列表的hash值对分区个数做取模运算,确保相同字段列表的数据被划分到同一个分区
global:所有的tuple都被发送到一个分区,这个分区用来处理整个Stream
batchGlobal:一个Batch中的所有tuple都被发送到同一个分区,不同的Batch会去往不同的分区
Partition:通过一个自定义的分区函数来进行分区,这个自定义函数实现了 backtype.storm.grouping.CustomStreamGrouping
I am partition [2] and I have kept a tweet by: dave
I am partition [2] and I have kept a tweet by: dave
I am partition [2] and I have kept a tweet by: dave
I am partition [2] and I have kept a tweet by: dave
测试结果正如我们上面描述的那样,相同字段的tuple被route到了同一个partition中。
重定向操作有如下几种:
shuffle:通过随机分配算法来均衡tuple到各个分区
broadcast:每个tuple都被广播到所有的分区,这种方式在drcp时非常有用,比如在每个分区上做stateQuery
partitionBy:根据指定的字段列表进行划分,具体做法是用指定字段列表的hash值对分区个数做取模运算,确保相同字段列表的数据被划分到同一个分区
global:所有的tuple都被发送到一个分区,这个分区用来处理整个Stream
batchGlobal:一个Batch中的所有tuple都被发送到同一个分区,不同的Batch会去往不同的分区
Partition:通过一个自定义的分区函数来进行分区,这个自定义函数实现了 backtype.storm.grouping.CustomStreamGrouping
阅读全文
1 0
- STORM入门之(Stream Groupings分组方式)
- storm Stream Groupings介绍
- Storm的Stream分组方式
- Storm中Stream分组
- storm 流分组策略(Stream grouping)
- storm 流分组策略(Stream grouping)
- Storm之自定义分组
- Storm 编程模型 核心组件 Stream Grouping 数据分组策略
- Stream groupings中可以选择的组别及含义
- STORM入门之(基本Shell命令)
- STORM入门之(Topology简易Demo)
- STORM入门之(集成KafkaBolt)
- STORM入门之(集成KafkaSpout)
- STORM入门之(集成ElasticSearch)
- STORM入门之(集成Redis)
- STORM入门之(TridentAPI,Each)
- STORM入门之(TridentAPI,Aggregation)
- STORM入门之(TridentTopology集成Kafka)
- 单向一对多映射和双向一对多映射
- 转,怕自己忘记<c:forEach varStatus="status">中 varStatus的作用
- 35day 新浪微博(CELL转发)
- 为什么越省钱的人却越穷?
- js取得参数的最好的代码,及其他代码搜集
- STORM入门之(Stream Groupings分组方式)
- 嵌套的控制结构、其他控制语句
- DataExcel 设置 函数
- struts2与struts1区别二
- codeforces833 A题解
- OpenCV学习之滤波器与彩色变换
- 文章标题
- linux学习之旅(十四)&& 系统延时及定时任务
- jeecms系统使用介绍——jeecms中的内容、栏目、模型之间的关系