一、前言

  針對大叔據(jù)實時處理的入門,除了使用WordCount示例之外,還需要相對更深入點的示例來理解Storm,因此,本篇博文利用Storm實現(xiàn)了頻繁項集挖掘的案例,以方便更好的入門Storm。

二、基礎知識

  2.1 頻繁二項集挖掘

  如顧客去超市購物時,牙膏和牙刷基本上都是擺放在一起,因為購買牙膏時,很有可能會購買牙刷。另外,“啤酒與尿布”的案例則是對訂單進行分析挖掘后發(fā)現(xiàn)的規(guī)律,將啤酒和尿布一起擺放會促進啤酒的銷量。

  2.2 算法設計

  本示例中不考慮太復雜的挖掘算法,只考慮將兩個商品組合后的挖掘,設計如下

    · 將每筆訂單的商品按照兩兩分組。

    · 將每個分組的頻度進行統(tǒng)計(不考慮商品的次序)。

    · 根據(jù)頻度計算支持度(每個組合出現(xiàn)的頻率越高,更有可能是頻繁組合)和置信度(商品組合出現(xiàn)的置信程度)。

    · 設置支持度和置信度閾值,過濾不達標的數(shù)據(jù)。

  2.3 Storm設計思路

    · 使用Redis作為存儲訂單數(shù)據(jù)的數(shù)據(jù)庫。

    · 使用Spout從Redis中讀取訂單數(shù)據(jù)。

    · 使用Bolt計算分組頻度。

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

    · 使用Bolt篩選結果并存儲到Redis中。

  2.4 拓撲結構圖

  根據(jù)程序思路設計如下所示的拓撲結構,其組件在之后進行介紹。

  大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

三、設計實現(xiàn)

  3.1 實現(xiàn)步驟

  1. 產(chǎn)生訂單數(shù)據(jù)

  通過模擬程序產(chǎn)生訂單數(shù)據(jù),并存儲Redis中,即使用OrderGenerator來生成訂單數(shù)據(jù)并存入Redis中,每個訂單有四種不同商品及其數(shù)量組成。

  2. 接入訂單數(shù)據(jù)

  通過OrderSpout讀取Redis中的訂單數(shù)據(jù),以供拓撲結構下游的Bolt使用。

  3. 對訂單中商品進行分組

  通過SplitBolt對訂單中的商品進行分組,兩兩分組并構建商品對,發(fā)送元組至下游Bolt。

  4. 統(tǒng)計商品對總數(shù)

  使用PairTotalCountBolt對所有商品對數(shù)量進行統(tǒng)計(用于計算支持度),并發(fā)送元組至下游Bolt。

  5. 統(tǒng)計商品對及其出現(xiàn)次數(shù)

  使用PairCountBolt對商品對出現(xiàn)的次數(shù)進行統(tǒng)計,并發(fā)送元組至下游Bolt。

  6. 計算商品對支持度

  使用SupportComputeBolt對商品對的支持度進行計算,并發(fā)送元組至下游Bolt。

  7. 計算商品對置信度

  使用ConfidenceComputeBolt對商品對的置信度進行計算,并發(fā)送元組至下游Bolt。

  8. 過濾符合條件的商品對

  使用FilterBolt對符合條件的商品對進行過濾并存入redis,并發(fā)送元組至下游Bolt。

     3.1 源碼分析

  下面給出拓撲結構中的各組件的源碼并進行分析。

  1. OrderSpout   

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓 OrderSpout

  說明:OrderSpout會從redis中讀取訂單數(shù)據(jù),并遍歷訂單中每個商品并發(fā)射,同時會統(tǒng)計商品數(shù)據(jù)并存入redis。

  2. CommandSpout

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓 CommandSpout

  說明:下游Bolt根據(jù)其發(fā)射的元組信息來統(tǒng)計支持度和置信度,其每5秒發(fā)射一次統(tǒng)計信號。

  3. SplitBolt 

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓 SplitBolt

  說明:其將每個訂單的兩兩商品進行組合,然后發(fā)射。

  4. PairTotalCountBolt 

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓 PairTotalCountBolt

  說明:其用于統(tǒng)計所有商品對的數(shù)量(用于后面支持度的計算)。

  5. PairCountBolt

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓 PairCountBolt

  說明:其用于統(tǒng)計每個商品對出現(xiàn)的次數(shù),然后發(fā)射。

  6. SupportComputeBolt  

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓 SupportComputeBolt

  說明:計算每個商品對的支持度,并且發(fā)射支持度。

  7. ConfidenceComputeBolt 

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓 View Code

  說明:計算商品對的置信度,并且發(fā)射置信度。

  8. FilterBolt

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓 FilterBolt

  說明:判斷支持度和置信度是否超過了閾值,若超過則需要存入redis,否則,從redis中刪除。

四、程序運行

  4.1. 環(huán)境依賴

  打開redis服務器、客戶端(方便觀看結果)和zookeeper。

  4.2. 寫入訂單數(shù)據(jù)

  運行OrderGenerator,生成并寫入訂單數(shù)據(jù),通過redis查看,結果如下

  大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

  表示已經(jīng)成功寫入了訂單數(shù)據(jù)。

  4.3. 運行任務拓撲

  運行OrderTopology,其會根據(jù)訂單中的商品數(shù)據(jù),生成并寫入推薦商品對,通過redis查看,結果如下

  大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

  可以看到運行完成后,已經(jīng)成功生成了推薦商品方案。

五、總結

  通過本篇Storm案例的學習,對于Storm的編程有了更深入的認識,同時,本項目的源代碼已經(jīng)上傳至github,歡迎star,謝謝各位園友的觀看~  

 

參考鏈接:http://www.jikexueyuan.com/course/1437.html

PS:如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”,將會是我不竭的動力! 
作者:leesf    掌控之中,才會成功;掌控之外,注定失敗。 
出處:http://www.cnblogs.com/leesf456/ 
本文版權歸作者和博客園共有,歡迎轉載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

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