Storm簡介、環境搭建

一、簡介

  • Storm是Twitter開源的一個分佈式的實時計算系統,用於數據的實時分析,持續計算,分佈式RPC等等。
  • 實時計算需要解決一些什麼問題?
    1)、最顯而易見的就是實時推薦系統,比如我們在淘寶等電商網站去買東西,我們會在網頁旁邊或者底端看到與自己所需要商品相關的系列產品。這就是使用類似storm實時計算去做的,我們非常熟悉的Hadoop只是做離線的數據分析,無法做到實時。
    2)、比如車流量實時的計算,每天我們北京市的交通情況非常的擁擠,我們可以利用storm爲我們實時計算每個路段的擁擠程度等相關路況信息。
    3)、再比如我們非常熟悉的股票,那麼股票系統也是一種實時計算的機制,利用storm完全可以實現。

  • 實現一個實時計算系統
    1)、低延遲:都說了是實時計算系統,延遲是一定要低的。
    2)、高性能:可以使用幾臺普通的服務器建立環境,結約成本。
    3)、分佈式:storm非常適合於分佈式場景,大數據的實時計算:你的數據和計算單機就能搞定,那麼不用考慮這些複雜的問題了。我們所說的是單機搞不定的情況。
    4)、可擴展:伴隨着業務的發展,我們數據量、計算量可能會越來越大,所以希望這個系統可擴展。
    5)、容錯:這是分佈式系統中通用問題,一個節點掛了不能影響我的應用,storm可以輕鬆做到在節點掛了的時候實現任務轉移,並且在節點重啓的時候,也就是重新投入生產環境,自動平衡任務。
    6)、可靠性:可靠的消息處理。storm保證每個消息至少能得到一次完整處理。任務失敗時,它會負責從消息源重試消息。
    7)、快速:系統的設計保證了消息能得到快速的處理,使用ZeroMQ作爲其底層消息隊列。
    8)、本地模式:storm有一個“本地模式”,可以在處理過程中完全模擬storm集羣,讓你可以快速進行開發和單元測試。

  • Storm是一個開源的分佈式實時計算系統,可以簡單、可靠的處理大量的數據流。Storm有很多使用場景:如實時分析,在線機器學習,持續計算,分佈式RPC,ETL等。Storm支持水平擴展,具有高容錯性,保證每個消息都會得到處理,而且處理速度很快。Storm的部署和運維都很便捷,而且更爲重要的是可以使用任意程序語言來開發應用。
    這裏寫圖片描述

  • Storm體系結構
    1)、Nimbus主節點:主節點通常運行一個後臺程序——Nimbus,用於響應分佈在集羣中的節點,分配任務和檢測故障。這個很類似於Hadoop中的Job Tracker。
    2)、Supervisor工作節點:工作節點同樣會運行一個後臺程序——Supervisor,用於收聽工作指派開機與要求運行工作過程。每個工作節點都是topology中一個子集的實現。而Nimbus和Supervisor之間的協調則通過Zookeeper系統或者集羣。
    3)、Zookeeper:是完成Supervisor和Nimbus之間協調的服務。而應用程序實現實時的邏輯則被封裝到Storm中的“topology”。topology則是一組由Spouts(數據源)和Bolts(數據操作)通過Stream Groupings進行連接的圖。下面對出現的術語進行深刻解析。
    4)、Topology(拓撲):storm中運行的一個實時應用程序,因爲各個組件的消息流動形成邏輯上的一個拓撲結構。一個topology是spouts和bolts組成的圖,通過stream groupings將圖中的spouts和bolts連接起來。
    這裏寫圖片描述

二、集羣環境搭建

  1. 關閉防火牆,修改/etc/hosts配置(三臺機器的IP可以相互通信);
  2. 下載並安裝JDK7(1.6以上版本),配置JAVA_HOME,CLASSPATH;
  3. 搭建Zookeeper集羣(保證3臺機器的zookeeper都可調用);
  4. 安裝python(最好2.6.6版本以上):
    4.1)、地址:wget https://www.python.org/ftp/python/2.6.6/Python-2.6.6.tgz
    4.2)、解壓:tar -zxvf Python-2.6.6.tgz
    4.3)、進入:cd Python-2.6.6
    4.4)、命令1:./configure --prefix=/usr/local/Python2.6.6
    4.5)、命令2:make
    4.6)、命令3:sudo make install
    ** 環境準備工作

  5. 下載:wget http://mirror.bit.edu.cn/apache/incubator/storm/apache-storm-0.9.2-incubating/apache-storm-0.9.2-incubating.tar.gz
    並解壓:tar -zxvf apache-storm-0.9.2-incubating.tar.gz -C /usr/local/

  6. 修改storm.yaml配置文件;
    這裏寫圖片描述
1)、storm.zookeeper.servers:(設置3臺zookeeper地址)
2)、nimbus.host:(配置nimbus主節點IP地址)
3)、配置storm數據文件夾和 ui.port:18080
4)、配置supervisor的工作進程(solt槽)
5)、建立文件夾:mkdir /usr/local/apache-storm-0.9.2/data
6)、把apache-storm-0.9.2使用scp命令,到集羣的各個服務器中去
7)、分別配置以下/etc/profile的Storm環境變量:
    export JAVA_HOME=/usr/local/jdk1.7
    export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.5
    export STORM_HOME=/usr/local/apache-storm-0.9.2
    export PATH=.;$JAVA_HOME/bin;$ZOOKEEPER_HOME/bin;$STORM_HOME/bin;$PATH
8)、最後分別進行:source /etc/profile
9)、先啓動zookeeper集羣,然後分別啓動運行storm:
    主機器(nimbus運行)storm nimbus &
    從機器(supervisor運行)storm supervisor &
    主機器(ui運行)storm ui & (查看ui)
    主機器(logviewer運行)storm logviewer & (查看工作日誌)
    然後再瀏覽器輸入主機器的ip,端口默認8080,這樣可以看到storm的一些集羣配置
  1. 啓動Storm各個後臺進程。

8.Storm Hello World

  • 首先編寫我們的數據源類:Spout,可以使用兩種方式:
    A、繼承BaseRichSpout類
    B、實現IRichSpout接口
    *、重點需要幾個方法進行重寫或實現:open、next Tuple、declareOutputFields

  • 繼續編寫我們數據處理類:Bolt,可以使用兩種方法:
    A、繼承BaseBasicBolt類
    B、實現IRichBolt接口
    *、重點需要幾個方法進行重寫或實現:execute、declareOutputFields

  • 最後編寫主函數(Topology)進行提交任務:
    A、在使用Topology的時候,Storm框架爲我們提供了兩種模式:本地模式和集羣模式
    B、本地模式:(無需Storm集羣,直接在java中即可運行,一般用於測試和開發階段)執行運行main函數即可
    C、集羣模式:(需要Storm集羣,把實現Java程序打包,然後Topology進行提交)需要把應用打成jar,使用storm命令把Topology提交到集羣上。
    提交topology命令:storm jar storm01.jar bhz.topoloty.PWTopology1
    查看任務命令:storm list
    另外倆個supervisor節點jps顯示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章