JStorm使用总结
JStorm 是一個類似Hadoop MapReduce的系統(tǒng), 用戶按照指定的接口實現(xiàn)一個任務(wù),然后將這個任務(wù)遞交給JStorm系統(tǒng),JStorm將這個任務(wù)跑起來,并且按7 * 24小時運(yùn)行起來,一旦中間一個Worker 發(fā)生意外故障, 調(diào)度器立即分配一個新的Worker替換這個失效的Worker。
因此,從應(yīng)用的角度,JStorm應(yīng)用是一種遵守某種編程規(guī)范的分布式應(yīng)用。從系統(tǒng)角度, JStorm是一套類似MapReduce的調(diào)度系統(tǒng)。 從數(shù)據(jù)的角度,JStorm是一套基于流水線的消息處理機(jī)制。
實時計算現(xiàn)在是大數(shù)據(jù)領(lǐng)域中最火爆的一個方向,因為人們對數(shù)據(jù)的要求越來越高,實時性要求也越來越快,傳統(tǒng)的Hadoop MapReduce,逐漸滿足不了需求,因此在這個領(lǐng)域需求不斷。
Storm組件和Hadoop組件對比
| Storm | Hadoop | |
|---|---|---|
| 角色 | Nimbus | JobTracker |
| Supervisor | TaskTracker | |
| Worker | Child | |
| 應(yīng)用名稱 | Topology | Job |
| 編程接口 | Spout/Bolt | Mapper/Reducer |
Spout
在邏輯上,一個Topology 是由一些Spout(消息的發(fā)送者)和Bolt(消息的處理者)組成圖狀結(jié)構(gòu)
每個Spouts 都可以發(fā)射多個消息流,要實現(xiàn)這樣的效果,可以使用OutFieldsDeclarer.declareStream 來定義多個Stream,然后使用SpoutOutputCollector 來發(fā)射指定的Stream。
bolt
所有的拓?fù)涮幚矶紩赽olt中進(jìn)行,bolt里面可以做任何etl,比如過濾,函數(shù),聚合,連接,寫入數(shù)據(jù)庫系統(tǒng)或緩存等,一個bolt可以做簡單的事件流轉(zhuǎn)換,如果是復(fù)雜的流轉(zhuǎn)化,往往需要多個bolt參與,這就是流計算,每個bolt都進(jìn)行一個業(yè)務(wù)邏輯處理,bolt也可以emit多個流到下游,通過declareStream方法聲明輸出的schema。
Bolt里面主要的方法是execute方法,每次處理一個輸入的tuple,bolt里面也可以發(fā)射新的tuple使用OutputCollector類,bolt里面每處理一個tuple必須調(diào)用ack方法以便于storm知道某個tuple何時處理完成。Strom里面的IBasicBolt接口可以自動
調(diào)用ack。
優(yōu)點
在Storm和JStorm出現(xiàn)以前,市面上出現(xiàn)很多實時計算引擎,但自Storm和JStorm出現(xiàn)后,基本上可以說一統(tǒng)江湖: 究其優(yōu)點:
- 開發(fā)非常迅速:接口簡單,容易上手,只要遵守Topology、Spout和Bolt的編程規(guī)范即可開發(fā)出一個擴(kuò)展性極好的應(yīng)用,底層RPC、Worker之間冗余,數(shù)據(jù)分流之類的動作完全不用考慮
- 擴(kuò)展性極好:當(dāng)一級處理單元速度,直接配置一下并發(fā)數(shù),即可線性擴(kuò)展性能
- 健壯強(qiáng):當(dāng)Worker失效或機(jī)器出現(xiàn)故障時, 自動分配新的Worker替換失效Worker
- 數(shù)據(jù)準(zhǔn)確性:可以采用Ack機(jī)制,保證數(shù)據(jù)不丟失。 如果對精度有更多一步要求,采用事務(wù)機(jī)制,保證數(shù)據(jù)準(zhǔn)確。
應(yīng)用場景
JStorm處理數(shù)據(jù)的方式是基于消息的流水線處理, 因此特別適合無狀態(tài)計算,也就是計算單元的依賴的數(shù)據(jù)全部在接受的消息中可以找到, 并且最好一個數(shù)據(jù)流不依賴另外一個數(shù)據(jù)流。
因此,常常用于
- 日志分析,從日志中分析出特定的數(shù)據(jù),并將分析的結(jié)果存入外部存儲器如數(shù)據(jù)庫。目前,主流日志分析技術(shù)就使用JStorm或Storm
- 管道系統(tǒng), 將一個數(shù)據(jù)從一個系統(tǒng)傳輸?shù)搅硗庖粋€系統(tǒng), 比如將數(shù)據(jù)庫同步到Hadoop
- 消息轉(zhuǎn)化器, 將接受到的消息按照某種格式進(jìn)行轉(zhuǎn)化,存儲到另外一個系統(tǒng)如消息中間件
- 統(tǒng)計分析器, 從日志或消息中,提煉出某個字段,然后做count或sum計算,最后將統(tǒng)計值存入外部存儲器。中間處理過程可能更復(fù)雜。
- 實時推薦系統(tǒng), 將推薦算法運(yùn)行在jstorm中,達(dá)到秒級的推薦效果
在實際應(yīng)用中,一般會通過spout與其他系統(tǒng)集成,例如RocketMQ這樣的消息隊列。對于處理完成的數(shù)據(jù),也可以選擇輸出到db或在bolt中直接導(dǎo)向其他系統(tǒng)做進(jìn)一步處理
紅豆Live推薦算法中召回和排序的應(yīng)用和策略
(召回環(huán)節(jié),又叫匹配環(huán)節(jié),是從海量商品庫里得到的一個候選商品集合)
第一,對用戶的行為日志進(jìn)行利用 JStorm 實時收集,并定時更新基于 item 的協(xié)同過濾內(nèi)容。
第二,對直播間內(nèi)容進(jìn)行利用 JStorm 實時收集,實時為直播間打上分類標(biāo)簽、topic、主題詞等標(biāo)簽,并定時更新用戶畫像內(nèi)容。
第三,對用戶 query 日志利用 JStorm 實時收集,定時計算用戶 query 的 CTR。
最后,當(dāng)用戶進(jìn)行刷新時,利用召回策略進(jìn)行召回,再根據(jù)排序策略選擇 top N 呈現(xiàn)給用戶。
推薦系統(tǒng)一般是實時數(shù)據(jù)統(tǒng)計,離線數(shù)據(jù)統(tǒng)計加權(quán)得到的結(jié)果
Storm流之一個Spout分發(fā)多個Bolt
Storm流之多個Bolt聚合到一個Bolt
騰訊云推薦系統(tǒng)介紹–百億級通用推薦系統(tǒng)實踐
總結(jié)
以上是生活随笔為你收集整理的JStorm使用总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搭建Socks5代理服务器[通俗易懂]
- 下一篇: 陕西专科学校王牌计算机专业,陕西省高职专