本節內容:node
Apache Storm是自由開源的分佈式實時計算系統,擅長處理海量數據,適用於數據實時處理而非批處理。數據庫
批處理使用的大可能是鼎鼎大名的hadoop或者hive,做爲一個批處理系統,hadoop以其吞吐量大、自動容錯等優勢,在海量數據處理上獲得了普遍的使用。可是,hadoop不擅長實時計算,由於它自然就是爲批處理而生的,這也是業界一致的共識。不然最近幾年也不會有s4,storm,puma這些實時計算系統如雨後春筍般冒出來啦。apache
舉個搜索場景中的例子,當一個賣家發佈了一條寶貝信息時,他但願的固然是這個寶貝立刻就能夠被賣家搜索出來、點擊、購買啦,相反,若是這個寶貝要等到次日或者更久才能夠被搜出來,估計就會有很多損失了。 再舉一個推薦的例子,若是用戶昨天在淘寶上買了一雙襪子,今天想買一副泳鏡去游泳,可是卻發現系統在竭盡全力地給他推薦襪子、鞋子,根本對他今天尋找泳鏡的行爲視而不見,這樣商家的利益就有所損失。這是由於後臺系統作的是天天一次的全量處理,並且大可能是在夜深人靜之時作的,那麼客戶今天白天作的事情要到明天才能反映出來。這也就是爲何須要實時處理的緣由。vim
1. Storm集羣架構圖架構
Zookeeper集羣在Storm集羣中的做用:分佈式
Zookeeper集羣負責Nimbus節點和Supervior節點之間的通訊,監控各個節點之間的狀態。好比一般咱們提交任務的時候是在Nimbus節點上執行的,Nimbus節點經過zk集羣將任務分發下去,而Supervisor是真正執行任務的地方。Nimbus節點經過zk集羣監控各個Supervisor節點的狀態,當某個Supervisor節點出現故障的時候,Nimbus節點就會經過zk集羣將那個Supervisor節點上的任務從新分發,在其餘Supervisor節點上執行。這就意味着Storm集羣也是高可用集羣,若是Nimbus節點出現故障的時候,整個任務並不會中止,可是任務的管理會出現影響,一般這種狀況下咱們只須要將Nimbus節點恢復就能夠了。Nimbus節點不支持高可用,這也是Storm目前面臨的問題之一。不過通常狀況下,Nimbus節點的壓力不大,一般不會出現問題。oop
通常狀況下,Zookeeper集羣的壓力並不大,通常只須要部署3臺就夠了。Zookeeper集羣在Storm集羣中邏輯上是獨立的,但在實際部署的時候,通常會將zk節點部署在Nimbus節點或Supervisor節點上。ui
2. 數據處理流程圖spa
storm處理數據的特色:數據源源不斷,不斷處理。操作系統
3. 拓撲圖分析
storm中是沒有數據存儲結構的,咱們須要本身設計數據落地接口,指明數據存儲到哪一部分中。Storm自己是不存儲數據的。
1. 環境信息
主機名 | 操做系統版本 | IP地址 | 安裝軟件 |
log1 | CentOS 7.0 | 114.55.29.86 | JDK1.七、zookeeper-3.4.六、apache-storm-1.0.0 |
log1 | CentOS 7.0 | 114.55.29.241 | JDK1.七、zookeeper-3.4.六、apache-storm-1.0.0 |
log3 | CentOS 7.0 | 114.55.253.15 | JDK1.七、zookeeper-3.4.六、apache-storm-1.0.0 |
2. 安裝Zookeeper集羣
參見以前的文章《Zookeeper介紹及安裝部署》。
3. 安裝Storm集羣
log一、log2和log3部署storm集羣,log1做爲Nimbus節點,log2和log3做爲surpervisor節點。
(1)下載安裝軟件並解壓
[root@log1 local]# wget http://apache.fayea.com/storm/apache-storm-1.0.0/apache-storm-1.0.0.tar.gz [root@log1 local]# tar zxf apache-storm-1.0.0.tar.gz
(2)配置storm
[root@log1 ~]# cd /usr/local/apache-storm-1.0.0/ [root@log1 apache-storm-1.0.0]# vim conf/storm.yaml
storm.local.dir: "/usr/local/apache-storm-1.0.0/status"
這個status目錄在storm啓動的時候會自動建立,固然也能夠提早建立好。
supervisor.slots.ports: - 6700 - 6701 - 6702 - 6703
配置工做節點上的進程端口。你配置一個端口,意味着工做節點上啓動一個worker,在實際的生產環境中,咱們須要根據實際的物理配置以及每一個節點上的負載狀況來配置這個端口的數量。在這裏每一個節點我象徵性的配置4個端口。
注意:以上配置,凡有冒號的地方,冒號後都要有個空格。
log2和log3主機也是一樣的配置。拷貝這臺機器的storm包到log2和log3主機:
[root@log1 local]# scp -pr apache-storm-1.0.0 root@114.55.29.241:/usr/local/ [root@log1 local]# scp -pr apache-storm-1.0.0 root@114.55.253.15:/usr/local/
supervisor.childopts: -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9998
9998就是用於經過JMX收集supervisior JVM指標的端口。
(3)配置storm環境變量
[root@log1 apache-storm-0.10.0]# vim /etc/profile export STORM_HOME=/usr/local/apache-storm-0.10.0 export PATH=$STORM_HOME/bin:$PATH [root@log1 apache-storm-0.10.0]# source /etc/profile
log1節點啓動nimbus和storm ui:
[root@log1 ~]# nohup storm ui >/dev/null 2>&1 & [root@log1 ~]# nohup storm nimbus >/dev/null 2>&1 &
log2和log3主機啓動Supervisor節點:
[root@log2 ~]# nohup storm supervisor >/dev/null 2>&1 & [root@log3 ~]# nohup storm supervisor >/dev/null 2>&1 &
訪問ui頁面: http://114.55.29.86:8080/
界面簡單介紹: