一、前言

  针对大叔据实时处理的入门,除了使用WordCount示例之外,还需要相对更深入点的示例来理解Storm,因此,本篇博文利用Storm实现了频繁项集挖掘的案例,以方便更好的入门Storm。

二、基础知识

  2.1 频繁二项集挖掘

  如顾客去超市购物时,牙膏和牙刷基本上都是摆放在一起,因为购买牙膏时,很有可能会购买牙刷。另外,“啤酒与尿布”的案例则是对订单进行分析挖掘后发现的规律,将啤酒和尿布一起摆放会促进啤酒的销量。

  2.2 算法设计

  本示例中不考虑太复杂的挖掘算法,只考虑将两个商品组合后的挖掘,设计如下

    · 将每笔订单的商品按照两两分组。

    · 将每个分组的频度进行统计(不考虑商品的次序)。

    · 根据频度计算支持度(每个组合出现的频率越高,更有可能是频繁组合)和置信度(商品组合出现的置信程度)。

    · 设置支持度和置信度阈值,过滤不达标的数据。

  2.3 Storm设计思路

    · 使用Redis作为存储订单数据的数据库。

    · 使用Spout从Redis中读取订单数据。

    · 使用Bolt计算分组频度。

    · 使用Bolt计算支持度和置信度。

    · 使用Bolt筛选结果并存储到Redis中。

  2.4 拓扑结构图

  根据程序思路设计如下所示的拓扑结构,其组件在之后进行介绍。

  大数据培训,云培训,数据挖掘培训,云计算培训,高端软件开发培训,项目经理培训

三、设计实现

  3.1 实现步骤

  1. 产生订单数据

  通过模拟程序产生订单数据,并存储Redis中,即使用OrderGenerator来生成订单数据并存入Redis中,每个订单有四种不同商品及其数量组成。

  2. 接入订单数据

  通过OrderSpout读取Redis中的订单数据,以供拓扑结构下游的Bolt使用。

  3. 对订单中商品进行分组

  通过SplitBolt对订单中的商品进行分组,两两分组并构建商品对,发送元组至下游Bolt。

  4. 统计商品对总数

  使用PairTotalCountBolt对所有商品对数量进行统计(用于计算支持度),并发送元组至下游Bolt。

  5. 统计商品对及其出现次数

  使用PairCountBolt对商品对出现的次数进行统计,并发送元组至下游Bolt。

  6. 计算商品对支持度

  使用SupportComputeBolt对商品对的支持度进行计算,并发送元组至下游Bolt。

  7. 计算商品对置信度

  使用ConfidenceComputeBolt对商品对的置信度进行计算,并发送元组至下游Bolt。

  8. 过滤符合条件的商品对

  使用FilterBolt对符合条件的商品对进行过滤并存入redis,并发送元组至下游Bolt。

     3.1 源码分析

  下面给出拓扑结构中的各组件的源码并进行分析。

  1. OrderSpout   

大数据培训,云培训,数据挖掘培训,云计算培训,高端软件开发培训,项目经理培训 OrderSpout

  说明:OrderSpout会从redis中读取订单数据,并遍历订单中每个商品并发射,同时会统计商品数据并存入redis。

  2. CommandSpout

大数据培训,云培训,数据挖掘培训,云计算培训,高端软件开发培训,项目经理培训 CommandSpout

  说明:下游Bolt根据其发射的元组信息来统计支持度和置信度,其每5秒发射一次统计信号。

  3. SplitBolt 

大数据培训,云培训,数据挖掘培训,云计算培训,高端软件开发培训,项目经理培训 SplitBolt

  说明:其将每个订单的两两商品进行组合,然后发射。

  4. PairTotalCountBolt 

大数据培训,云培训,数据挖掘培训,云计算培训,高端软件开发培训,项目经理培训 PairTotalCountBolt

  说明:其用于统计所有商品对的数量(用于后面支持度的计算)。

  5. PairCountBolt

大数据培训,云培训,数据挖掘培训,云计算培训,高端软件开发培训,项目经理培训 PairCountBolt

  说明:其用于统计每个商品对出现的次数,然后发射。

  6. SupportComputeBolt  

大数据培训,云培训,数据挖掘培训,云计算培训,高端软件开发培训,项目经理培训 SupportComputeBolt

  说明:计算每个商品对的支持度,并且发射支持度。

  7. ConfidenceComputeBolt 

大数据培训,云培训,数据挖掘培训,云计算培训,高端软件开发培训,项目经理培训 View Code

  说明:计算商品对的置信度,并且发射置信度。

  8. FilterBolt

大数据培训,云培训,数据挖掘培训,云计算培训,高端软件开发培训,项目经理培训 FilterBolt

  说明:判断支持度和置信度是否超过了阈值,若超过则需要存入redis,否则,从redis中删除。

四、程序运行

  4.1. 环境依赖

  打开redis服务器、客户端(方便观看结果)和zookeeper。

  4.2. 写入订单数据

  运行OrderGenerator,生成并写入订单数据,通过redis查看,结果如下

  大数据培训,云培训,数据挖掘培训,云计算培训,高端软件开发培训,项目经理培训

  表示已经成功写入了订单数据。

  4.3. 运行任务拓扑

  运行OrderTopology,其会根据订单中的商品数据,生成并写入推荐商品对,通过redis查看,结果如下

  大数据培训,云培训,数据挖掘培训,云计算培训,高端软件开发培训,项目经理培训

  可以看到运行完成后,已经成功生成了推荐商品方案。

五、总结

  通过本篇Storm案例的学习,对于Storm的编程有了更深入的认识,同时,本项目的源代码已经上传至github,欢迎star,谢谢各位园友的观看~  

 

参考链接:http://www.jikexueyuan.com/course/1437.html

PS:如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”,将会是我不竭的动力! 
作者:leesf    掌控之中,才会成功;掌控之外,注定失败。 
出处:http://www.cnblogs.com/leesf456/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

http://www.cnblogs.com/leesf456/p/7161995.html