博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Storm分布式实时计算模式》——3.5 Trident聚合器
阅读量:7272 次
发布时间:2019-06-29

本文共 1435 字,大约阅读时间需要 4 分钟。

本节书摘来自华章计算机《Storm分布式实时计算模式》一书中的第3章,第3.5节,作者:(美)P. Taylor Goetz Brian O’Neill 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.5 Trident聚合器

和function类似,aggregator(聚合器)允许topology组合tuple。不同的是,它会替换tuple的字段和值。有三种聚合器:CombinerAggregator、ReducerAggregator和Aggregator。

3.5.1 CombinerAggregator

CombinerAggregator用来将一个集合的tuple组合到一个单独的字段中,Combiner的签名(Signature)如下所示:

1afecfef595e15e396f886e7067d5c4beb74cf6a
Storm对每个tuple调用init()方法,然后重复调用combine()方法直到一个分片的数据处理完成。传递给combine()方法的两个参数是局部聚合的结果,以及调用了init()返回的值。分片会在后面的部分详细介绍,分片实际上就是tuples组成的数据流在同一个机器上的一个子集。将tuple生成的值进行组合之后,Storm发送组合结果作为一个新的字段。如果分片是空的,Storm会发送zero()方法执行的返回。
3.5.2 ReducerAggregator
ReducerAggregator接口有一点区别,签名如下:
93628b153d2c75462ab17b915ee62ba7b6e5bce6
Storm调用init()方法来获取原始值。然后为分片中的每一个tuple调用reduce()方法,直到分片数据处理完成。第一个参数是局部的聚合结果。这个方法的实现需要将第二个参数tuple合并到局部聚合结果中返回。
3.5.3 Aggregator
最通用的聚合操作是Aggregator。签名如下所示:
2da1b6f432c4af50a8dc7ac7d3db7091db22c566
Aggregator接口的aggregate()方法和function接口的execute()方法类似,但是多了一个value参数。这样Aggregator就可以在处理tuple的时候累积值。注意,在Aggregator接口中,aggregate()和complete()方法都有collector这个参数,通过它可以发射任意个数的tuple。在我们的topology例子中,我们利用了一个内置的Count的Aggregator。Count的实现如下面代码片段所示:
8eecd2bb76cf8372870ee0ce38d611127e7c0a0a
我们在示例topology中使用了分组和计数来统计在一个城市附近一个小时内发生疾病的次数。实现代码如下所示:
f450c66221fa16f59114b7aff11b3a1279ce8cbc
回顾Storm在不同机器上的数据的分片,如图3-2所示。
<a href=https://yqfile.alicdn.com/899f99dbd07c00661c7faf29135d61beb6420e4e.png
" >

groupBy()方法强制数据重新分片,将特定字段值相同的tuple分组到同一个分片中。为了做到这个,Storm必须将相似的tuple发送到相同的主机上。图3-3展示了数据被groupBy()重新分组后的分片情况。

<a href=https://yqfile.alicdn.com/3c5b95458c4e0eda57a90ddd66123171e5f7d382.png" >

分片后,agreagte函数在每个分片数据的每个分组中运行。在我们的例子里,根据城市、小时、疾病代码作为分组的关键词。然后Count aggregator在每个分组上执行,将计数发射给下游的消费者组件。

转载地址:http://ebscm.baihongyu.com/

你可能感兴趣的文章
Zabbix 3.4.3通过钉钉机器人报警
查看>>
ASP.NET中利用cookies保持客户端信息
查看>>
正则表达式的基本应用
查看>>
C#查找列表中所有重复出现元素代码
查看>>
rpm 和 yum 详解
查看>>
EOS源码分析(一)投票系统
查看>>
菱形虚拟继承&虚函数表&对象模型
查看>>
宏和函数的简单比较
查看>>
批量生成httpd-2.2十个虚拟主机配置
查看>>
红杉、IDG、北极光、顺为等投资大咖怎么看智能硬件
查看>>
Centos 7 破解root密码
查看>>
如何使用Visual Studio调试C#程序
查看>>
简单易操作的去水印工具有什么
查看>>
我的友情链接
查看>>
mysqldump: Couldn’t execute 错误
查看>>
给新手的Oracle学习路线
查看>>
超级全的H3C交换机配置命令
查看>>
Supesite 6.0 $_SGLOBAL[supe_username_show] 调用显示GUEST
查看>>
使用Powershell远程管理Windows Server(WinRM)
查看>>
学习日志---递归、非递归,迷宫问题
查看>>