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
Nimbus 和 Supervisor 節點之間全部的協調工做是經過 Zookeeper 集羣來實現的。此外,Nimbus 和 Supervisor 進程都是快速失敗(fail-fast)和無狀態(stateless)的;Storm 集羣全部的狀態要麼在 Zookeeper 集羣中,要麼存儲在本地磁盤上。這意味着你能夠用 kill -9 來殺死 Nimbus 和 Supervisor 進程,它們在重啓後能夠繼續工做。這個設計使得Storm集羣擁有難以想象的穩定性。apache
Storm 部署步驟less
搭建一個Storm集羣須要依次完成的安裝步驟:機器學習
Storm.yaml 配置分佈式
Storm發行版本解壓目錄下有一個conf/storm.yaml文件,用於配置Storm。默認配置能夠在這裏查看。conf/storm.yaml中的配置選項將覆蓋defaults.yaml中的默認配置。如下配置選項是必須在conf/storm.yaml中進行配置的:oop
[注] 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各個後臺進程的方式:
至此,Storm集羣已經部署、配置完畢,能夠向集羣提交拓撲運行了。
向Storm 集羣提交任務
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 任務名稱。