Storm是Twitter開源的分布式實時大數據處理框架,被業界稱為實時版Hadoop。按照storm作者的說法,Storm對於實時計算的意義類似於Hadoop對於批處理的意義。
應用場景包括推薦系統(實時推薦,根據下單或加入購物車推薦相關商品)、金融系統、預警系統、網站統計(實時銷量、流量統計,如淘寶雙11效果圖)、交通路況實時系統等等。
storm一般從日誌系統通過kafka收集數據,然後對數據進行處理運算(運算可以結合資料庫以及hdfs的存量數據),不斷將運算結果寫入redis,然後需要展示這個運算結果的系統從redis讀取數據。運算結果寫入redis和讀取展示運算結果是不斷重複的(例如1秒一次),這樣能實時觀察數據的變化。例如雙十一的銷售額會不斷增長,那麼storm就要不斷解析日誌累加銷售額,展示頁面也要不斷讀取redis最新的銷售額。
twitter和微博實時統計熱搜也是一樣,實時分析日誌才能發現今天的高頻詞是哪個。
也可以用於埋點收集日誌,用戶做某個動作,會觸發在日誌裡列印出某個關鍵字,通過對關鍵字的統計,可以實時分析用戶行為特徵。
本文演示安裝單機storm系統,並運行內置的示例程序。分為四個步驟:
安裝Java環境安裝 Zookeeper安裝Storm(單機)運行Storm實例-WordCount安裝Java環境
yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
env沒有JAVA_HOME變量,因此要自己配置該變量。查找jdk安裝目錄。
在/root目錄下編輯.bashrc
使環境變量生效,檢查是否有JAVA_HOME變量
安裝 Zookeeper
下載zookeeper-3.4.6.tar.gz,上傳到伺服器,解壓
進入zookeeper的conf文件夾
然後vi zoo.cfg
修改dataDir目錄為你希望的目錄
啟動zookeeper
安裝Storm(單機)
下載apache-storm-0.9.6.tar.gz 上傳伺服器,解壓
進入storm的conf目錄,修改storm.yaml文件,地址改成127.0.0.1,ui埠改成8888
bin目錄下依次啟動storm nimbus、storm supervisor、storm ui
瀏覽器輸入IP:8888可以打開UI界面。
如果訪問UI打不開一般是防火牆沒關閉,systemctl stop firewalld臨時關閉防火牆試試。
下圖描述了幾個角色之間的關係
運行Storm實例-WordCount
運行內置示例,示例程序不斷地取如下語句作為數據源,然後統計單詞出現的次數。後面加上grep the是篩選統計結果關於the這個單詞的次數。該程序執行10秒後會自動關閉。{"the cow jumped over the moon", "an apple a day keeps the doctor away", "four score and seven years ago", "snow white and the seven dwarfs", "i am at two with nature"}
./bin/storm jar ./examples/storm-starter/storm-starter-topologies-0.9.6.jar storm.starter.WordCountTopology |grep 'Thread-[0-9]*-count' | grep the