Trident wordCount例子解读

本文深入解析了 Apache Storm Tridents WordCount 的实现过程,包括数据源创建和拓扑构建两大步骤。首先,通过 FixedBatchSpout 创建了一个循环数据源,将四个句子不断循环形成数据流。接着,利用 TridentTopology 构建拓扑,通过遍历 batch、分组和聚合等操作,实现了单词计数的功能。

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

官方文档地址:http://storm.apache.org/documentation/Trident-tutorial.html

简介

这个手册,首先就给了WordCount的例子。WordCount就特么这么好理解么,接口文档上说明少的掉渣啊。吐槽完毕,例子主要分为两个步骤:1. 构建数据源;2. 构建拓扑。

1. 创造源数据
 FixedBatchSpout spout = new FixedBatchSpout(new Fields("sentence"), 3,
               new Values("the cow jumped over the moon"),
               new Values("the man went to the store and bought some candy"),
               new Values("four score and seven years ago"),
               new Values("how many apples can you eat"));
spout.setCycle(true);

效果:产生一个源数据流。处理过程中至多可以被分成3个batch,batch的name是“sentence”。不停的将上面的4个句子循环形成数据流。

2. 构建Topology
TridentTopology topology = new TridentTopology();        
TridentState wordCounts =
     topology.newStream("spout1", spout)
       .each(new Fields("sentence"), new Split(), new Fields("word"))
       .groupBy(new Fields("word"))
       .persistentAggregate(new MemoryMapState.Factory(), new Count(), new Fields("count"))                
       .parallelismHint(6);

每行依次的效果:
1. 以spout为源创建流;
2. 遍历流中name为“sentence”的batch,作为Split函数的输入,输出name为“word”的tuple。
3. 对name为“world”的tuple做groupby操作;
4. 对groupby的结果,做Count操作,Count为内建聚合方法,结果存储在内存中,存为name为”count”的tuple。每个batch的计算结果再进行聚合(叠加)。
5. 并发度为6,也就是最多允许6个线程。即Executor的数量。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值