天天看點

Apache Storm 叢集環境搭建

Apache storm 是一個由twitter開源的大資料處理系統,與其他系統不同的是,storm旨在用于分布式實時處理并且與語言無關。筆者所認知的storm使用場景諸如 實時日志分析、網站使用者行為實時分析、實時計算等,目前很多公司也都把storm作為自己的大資料架構的一部分,來實作一些實時業務的處理。

相信大家都和我有一樣的認知,那就是現在的技術都是項目驅動模式,沒有最好的技術,隻有最适合自己項目的技術。下面先跟大家分享一下我對storm的一些簡單了解:

storm的優點:

1.簡單的程式設計模型,類似于MapReduce降低了并行批處理的複雜性,storm降低了進行實時處理的複雜性。

2.支援各種語言,你可以在storm上使用Java、Ruby、Clojure和Python,如果想增加一個新的語言支援,你隻需要實作一個簡單的storm通信協定即可。

3.容錯性,storm會管理工作程序和節點的故障。

4.水準拓展,計算是在多個線程,程序和伺服器之間并行進行的。

5.可靠的消息處理,storm保證每個消息至少得到一次完整的處理,任務失敗時,storm會嘗試從消息源重新發射。

6.快速,系統的設計保證了消息能夠快得到快速處理,storm使用的ZeroMQ作為其底層的消息隊列。

7.本地模式,這個對開發者來說無疑是友善了很多,可以在本地模拟叢集環境進行開發和測試。

storm目前存在的問題:

1.目前的開源版本中隻有單節點的Nimbus,挂掉之後隻能自動去重新開機,對系統來說有一定的風險,可以考慮雙節點nimbus布局。

2.Storm的一部分核心代碼是由Clojure編寫,clojure是一個在JVM上運作的動态函數式程式設計語言,優勢在于流程計算,雖然性能上提高不少但是同時也提升了維護成本。

介紹說了一大堆,下面就簡單的搭建一個storm的叢集環境:

準備環境: 至少三台Linux server(筆者用了5台 cloud server for linux redhat edition)

叢集搭建:

第一步:安裝JDK/JRE

第二步:安裝 zookeeper ,可以參考我的另一篇博文: 

http://bigcat2013.iteye.com/blog/2175538

第三步:下載下傳apache storm : http://apache.arvixe.com/storm/  

之前的項目用過0.9.1版的,現在由于需要用到kafka,是以選擇了最新版0.9.3

第四步: 把下載下傳好的壓縮包上傳到伺服器(可以通過WinSCP等)

第五步:使用"tar -xzvf  apache-storm-0.9.3.tar.gz" 解壓壓縮包

解壓後的目錄結構:

Apache Storm 叢集環境搭建

第六步:修改storm配置檔案(/conf/storm.yaml)

基本的需要配置 storm.zookeeper.servers、nimbus.host、storm.local.dir、ui.port、supervisor.slots.ports幾個屬性,這裡需要注意的是nimbus不需要配置supervisor.slots.ports屬性,supervisor不需要配置ui.port屬性,因為nimbus是主節點,有ui沒有worker,supervisor是工作節點,沒有ui隻有worker:

common:

Apache Storm 叢集環境搭建

nimbus:

Apache Storm 叢集環境搭建

supervisor(每個supervisor的worker數目可以通過增減slots的數量調整):

Apache Storm 叢集環境搭建

注:配置資訊不要頂格寫,不然啟動的時候會報錯找不到屬性值。

第七步:通過”scp -r“把配置好的storm目錄copy到其他的server上(注:如果你目前的server配置為nimbus,其他的server就都按照上述的supervisor配置方法配置storm.yaml)

Apache Storm 叢集環境搭建

第八步:在叢集的伺服器上分别建立storm的本地目錄(對應storm.yaml中的storm.local.dir配置)

第九步:啟動zookeeper叢集,然後啟動storm叢集

啟動storm nimbus : sudo nohup ./bin/storm nimbus > /dev/null &

啟動storm UI :sudo nohup ./bin/storm ui > /dev/null &

啟動supervisor: sudo nohup ./bin/storm supervisor > /dev/null &

通過配置的nimbus位址+ui.port的屬性值可以通路storm的UI,監測storm的運作狀态。

按照上述簡單的配置之後,storm叢集就可以搭建起來了,讀者可以根據自己的項目需要做額外的配置,另外可以在/logback/cluster.xml中配置log4j,日志輸出和自動清理規則~