Apache Storm使用

    Apache Storm 是 Apache 基金會的開源的分佈式實時計算系統。與 Hadoop 的批處理相相似,Storm 能夠對大量的數據流進行可靠的實時處理,這一過程也稱爲「流式處理」,是分佈式大數據處理的一個重要方向。Storm 支持多種類型的應用,包括:實時分析、在線機器學習、連續計算、分佈式RPC(DRPC)、ETL等。Strom 的一個重要特色就是「快速」的數據處理,有 benchmark 顯示 Storm 可以達到單個節點每秒百萬級 tuple 處理(tuple 是 Storm 的最小數據單元)的速度。快速的數據處理、優秀的可擴展性與容錯性、便捷的可操做性與維護性、活躍的社區技術支持,這就是 Storm。java

Storm 集羣組件git

  Storm 集羣中包含兩類節點:主控節點(Master Node)和工做節點(Work Node)。其分別對應的角色以下:github

  •  主控節點(Master Node)上運行一個被稱爲Nimbus的後臺程序,它負責在Storm集羣內分發代碼,分配任務給工做機器,而且負責監控集羣運行狀態。Nimbus的做用相似於Hadoop中JobTracker的角色
  • 每一個工做節點(Work Node)上運行一個被稱爲Supervisor的後臺程序。Supervisor負責監遵從Nimbus分配給它執行的任務,據此啓動或中止執行任務的工做進程。每個工做進程執行一個Topology的子集;一個運行中的Topology由分佈在不一樣工做節點上的多個工做進程組成

    Nimbus 和 Supervisor 節點之間全部的協調工做是經過 Zookeeper 集羣來實現的。此外,Nimbus 和 Supervisor 進程都是快速失敗(fail-fast)和無狀態(stateless)的;Storm 集羣全部的狀態要麼在 Zookeeper 集羣中,要麼存儲在本地磁盤上。這意味着你能夠用 kill -9 來殺死 Nimbus 和 Supervisor 進程,它們在重啓後能夠繼續工做。這個設計使得Storm集羣擁有難以想象的穩定性。apache

Storm 部署步驟less

  搭建一個Storm集羣須要依次完成的安裝步驟:機器學習

  1. 搭建Zookeeper集羣
  2. 安裝Storm依賴庫(Java、Python)
  3. 下載並解壓Storm發佈版本
  4. 修改storm.yaml配置文件
  5. 啓動Storm各個後臺進程

Storm.yaml 配置分佈式

 Storm發行版本解壓目錄下有一個conf/storm.yaml文件,用於配置Storm。默認配置能夠在這裏查看。conf/storm.yaml中的配置選項將覆蓋defaults.yaml中的默認配置。如下配置選項是必須在conf/storm.yaml中進行配置的:oop

  1. storm.zookeeper.servers: Storm集羣使用的Zookeeper集羣地址,其格式以下: storm.zookeeper.servers: - "111.222.333.444" - "555.666.777.888" 若是Zookeeper集羣使用的不是默認端口,那麼還須要storm.zookeeper.port選項
  2. storm.local.dir: Nimbus和Supervisor進程用於存儲少許狀態,如jars、confs等的本地磁盤目錄,須要提早建立該目錄並給以足夠的訪問權限。而後在storm.yaml中配置該目錄,如: storm.local.dir: "/home/admin/storm/workdir"
  3. java.library.path: Storm使用的本地庫加載路徑,默認爲"/usr/local/lib:/opt/local/lib:/usr/lib",通常不須要配置
  4. nimbus.host: Storm集羣Nimbus機器地址,各個Supervisor工做節點須要知道哪一個機器是Nimbus,以便下載Topologies的jars、confs等文件,如: nimbus.host: "111.222.333.444"
  5. supervisor.slots.ports: 對於每一個Supervisor工做節點,須要配置該工做節點能夠運行的worker數量。每一個worker佔用一個單獨的端口用於接收消息,該配置選項即用於定義哪些端口是可被worker使用的。若是須要在每一個節點上運行4個workers,能夠分別使用6700、670一、6702和6703端口,如: supervisor.slots.ports: - 6700 - 6701 - 6702 - 6703
  6. JVM options: 用於配置Storm使用JVM參數

   [注] yaml 文件的配置使用「-」來表示數據的層次結構,配置項的:後必須有空格,不然該配置項沒法識別學習

  集羣配置示例以下:測試

########### These MUST be filled in for a storm configuration
# storm.zookeeper.servers:
#     - "server1"
#     - "server2"
 storm.zookeeper.servers:
    - "192.168.9.182"
    - "192.168.9.185"
    - "192.168.91.128"
 storm.zookeeper.port: 2181
# storm's work directory
 storm.local.dir: "/home/storm/workdir"
# nimbus.host: "nimbus"
 nimbus.host: "192.168.9.185"
# supervisor's work ports
 supervisor.slots.ports:
    -6700
    -6701
    -6702
    -6703

# #### Netty transport configuration
# transmission protocol
 storm.messaging.transport: "backtype.storm.messaging.netty.Context"
# server's work threads number
 storm.messaging.netty.server_worker_threads: 1
# client's work threads number
 storm.messaging.netty.client_worker_threads: 1
# buffer size
 storm.messaging.netty.buffer_size: 5242880
# max retry times
 storm.messaging.netty.max_retries: 100
# max waiting time(ms)
 storm.messaging.netty.max_wait_ms: 1000
# min waiting time(ms)
 storm.messaging.netty.min_wait_ms: 100

## JVM parameters can be configured here
 nimbus.childopts: "-Xloggc:/home/enjoyor/storm/apache-storm-0.9.3/logs/nimbusGC.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps"
 supervisor.childopts: "-Xloggc:/home/enjoyor/storm/apache-storm-0.9.3/logs/nimbusGC.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps"
 worker.childopts: "-Xloggc:/home/enjoyor/storm/apache-storm-0.9.3/logs/nimbusGC.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps"

Storm 運行

 和Zookeeper同樣,Storm也是快速失敗(fail-fast)的系統,這樣Storm才能在任意時刻被中止,而且當進程重啓後被正確地恢復執行。這也是爲何Storm不在進程內保存狀態的緣由,即便Nimbus或Supervisors被重啓,運行中的Topologies不會受到影響。如下是啓動Storm各個後臺進程的方式:

  • Nimbus: 在Storm主控節點上運行 nohup storm nimbus & 啓動Nimbus後臺程序,並放到後臺執行;
  • Supervisor: 在Storm各個工做節點上運行nohup storm supervisor & 啓動Supervisor後臺程序,並放到後臺執行;
  • UI: 在Storm主控節點上運行nohup storm ui & 啓動UI後臺程序,並放到後臺執行,啓動後能夠經過 http://{nimbus host}:8080 觀察集羣的worker資源使用狀況、Topologies的運行狀態等信息。

注意事項

  • Storm後臺進程被啓動後,將在Storm安裝部署目錄下的logs/子目錄下生成各個進程的日誌文件。
  • 經測試,Storm UI必須和Storm Nimbus 部署在同一臺機器上,不然UI沒法正常工做,由於UI進程會檢查本機是否存在Nimbus連接。
  • 爲了方便使用,能夠將bin/storm加入到系統環境變量中。

至此,Storm集羣已經部署、配置完畢,能夠向集羣提交拓撲運行了。

向Storm 集羣提交任務

  1. 啓動 Storm Topology:
storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3

  其中,allmycode.jar 是包含 Topology 實現代碼的 jar 包,org.me.MyTopology 的 main 方法是 Topology 的入口,arg一、arg2 和 arg3 爲 org.me.MyTopology 執行時須要傳入的參數。

        2. 中止 Storm Topology:

storm kill {toponame}

  其中,{toponame} 爲 Topology 提交到 Storm 集羣時指定的 Topology 任務名稱。

相關文章
相關標籤/搜索