jstorm 是乙個類似hadoop mapreduce的系統, 使用者按照指定的介面實現乙個任務,然後將這個任務遞交給jstorm系統,jstorm將這個任務跑起來,並且按7 * 24小時執行起來,一旦中間乙個worker 發生意外故障, 排程器立即分配乙個新的worker替換這個失效的worker。
因此,從應用的角度,jstorm應用是一種遵守某種程式設計規範的分布式應用。從系統角度, jstorm是一套類似mapreduce的排程系統。 從資料的角度,jstorm是一套基於流水線的訊息處理機制。
實時計算現在是大資料領域中最火爆的乙個方向,因為人們對資料的要求越來越高,實時性要求也越來越快,傳統的hadoop mapreduce,逐漸滿足不了需求,因此在這個領域需求不斷。
storm元件和hadoop元件對比
storm
hadoop
角色nimbus
jobtracker
supervisor
tasktracker
worker
child
應用名稱
topology
job程式設計介面
spout/bolt
spout
在邏輯上,乙個topology 是由一些spout(訊息的傳送者)和bolt(訊息的處理者)組成圖狀結構
每個spouts 都可以發射多個訊息流,要實現這樣的效果,可以使用outfieldsdeclarer.declarestream 來定義多個stream,然後使用spoutoutputcollector 來發射指定的stream。
bolt
所有的拓撲處理都會在bolt中進行,bolt裡面可以做任何etl,比如過濾,函式,聚合,連線,寫入資料庫系統或快取等,乙個bolt可以做簡單的事件流轉換,如果是複雜的流轉化,往往需要多個bolt參與,這就是流計算,每個bolt都進行乙個業務邏輯處理,bolt也可以emit多個流到下游,通過declarestream方法宣告輸出的schema。
bolt裡面主要的方法是execute方法,每次處理乙個輸入的tuple,bolt裡面也可以發射新的tuple使用outputcollector類,bolt裡面每處理乙個tuple必須呼叫ack方法以便於storm知道某個tuple何時處理完成。strom裡面的ibasicbolt介面可以自動
呼叫ack。
在storm和jstorm出現以前,市面上出現很多實時計算引擎,但自storm和jstorm出現後,基本上可以說一統江湖: 究其優點:
jstorm處理資料的方式是基於訊息的流水線處理, 因此特別適合無狀態計算,也就是計算單元的依賴的資料全部在接受的訊息中可以找到, 並且最好乙個資料流不依賴另外乙個資料流。
因此,常常用於
在實際應用中,一般會通過spout與其他系統整合,例如rocketmq這樣的訊息佇列。對於處理完成的資料,也可以選擇輸出到db或在bolt中直接導向其他系統做進一步處理
紅豆live推薦演算法中召回和排序的應用和策略
(召回環節,又叫匹配環節,是從海量商品庫里得到的乙個候選商品集合)
第一,對使用者的行為日誌進行利用 jstorm 實時收集,並定時更新基於 item 的協同過濾內容。
第二,對直播間內容進行利用 jstorm 實時收集,實時為直播間打上分類標籤、topic、主題詞等標籤,並定時更新使用者畫像內容。
第三,對使用者 query 日誌利用 jstorm 實時收集,定時計算使用者 query 的 ctr。
最後,當使用者進行重新整理時,利用召回策略進行召回,再根據排序策略選擇 top n 呈現給使用者。
推薦系統一般是實時資料統計,離線資料統計加權得到的結果
storm流之乙個spout分發多個bolt
storm流之多個bolt聚合到乙個bolt
Jstorm排程規則
任務排程演算法以worker為維度 排程過程中正在進行的排程動作不會對已發生的排程動作產生影響 排程過程中使用者可以自定義 usedefined assignment,和使用已有的old assignment,這兩者的優先順序是 usedefined assignment old assignmen...
Jstorm最佳實踐
在實際計算中,常常發現需要做資料訂正,因此在設計整個專案時,需要考慮重跑功能 如果使用trasaction時,增加kafka meta時,brokerid要按順序,即新增機器brokerid要比之前的都要大,這樣reassign spout消費brokerid時就不會發生錯位。非事務環境中,盡量使用...
JStorm平台搭建
簡易版可以參考 mvn package assembly assembly會在工程目錄下生成乙個檔案,打包在伺服器上解壓縮,按照上述步驟執行即可。you can download a jstorm release 出現上述問題是因為我們的目錄下缺少release檔案。放乙個進去就好。請不要忘記修改s...