跟我一起云計算(1)——storm
概述
?
最近要做一個實時分析的項目,所以需要深入一下storm。
?
為什么storm
?
綜合下來,有以下幾點:
?
1. 生逢其時
?
MapReduce 計算模型打開了分布式計算的另一扇大門,極大的降低了實現分布式計算的門檻。有了MapReduce架構的支持,開發者只需要把注意力集中在如何使用 MapReduce的語義來解決具體的業務邏輯,而不用頭疼諸如容錯,可擴展性,可靠性等一系列硬骨頭。一時間,人們拿著MapReduce這把榔頭去敲 各種各樣的釘子,自然而然的也試圖用MapReduce計算模型來解決流處理想要解決的問題。各種失敗的嘗試之后,人們意識到,改良MapReduce并 不能使之適應于流處理的場景,必須發展出全新的架構來完成這一任務(MapReduce不適合做流處理的原因Yahoo!在其S4的介紹論文里面有比較詳 細的闡述,而UCBerkeley的SparkStreaming項目現在正在嘗試挑戰這一結論,感興趣的同志請自行查看)。另一方面,人們對傳統的 CEP解決方案心存疑慮,認為其非分布式的架構可擴展性不夠,無法scaleout來滿足海量的數據處理要求。這時候,Yahoo!的S4以及 Twitter的Storm恰到好處的撓到了人們的癢處。
?
2. 可擴展性
?
更加明確的說,是scaleout的能力。所謂Scale out ( http://en.wikipedia.org/wiki/Scalability#Scale_horizontally_.28scale_out.29 ), 簡單來說就是當一個集群的處理能力不夠用的時候,只要往里面再追加一些新的節點,計算有能力遷移到這些新的節點來滿足需要??赡艿那闆r下,選擇 Scaleout 而非Scale up,這個觀念已經深入人心。一般來說,實現Scaleout的關鍵是Shared nothing architecture,即計算所需要的各種狀態都是自滿足的,不存在對特定節點強依賴,這樣,計算就可以很容易的在節點間遷移,整個系統計算能力不夠 用的時候,加入新的節點就可以了。Storm的計算模型本身是Scaleout友好的,Topology 對應的Spout和Bolt并不需要和特定節點綁定,可以很容易的分布在多個節點上。此外,Storm還提供了一個非常強大的命令 (rebalance),可以動態調整特定Topology中各組成元素(Spout/Bolt)的數量以及其和實際計算節點的對應關系。
?
3. 系統可靠性
?
Storm 這個分布式流計算框架是建立在Zookeeper的基礎上的,大量系統運行狀態的元信息都序列化在Zookeeper中。這樣,當某一個節點出錯時,對應 的關鍵狀態信息并不會丟失,換言之Zookeeper的高可用保證了Storm的高可用。文檔(https://github.com /nathanmarz/storm/wiki/Fault-tolerance)討論了Storm各個子系統的錯誤冗余行為,可以進一步參考。
?
4. 計算的可靠性
?
分 布式計算涉及到多節點/進程之間的通信和依賴,正確的維護所有參與者的狀態和依賴關系,是一件非常有挑戰性的任務。Storm實現了一整套機制,確保消息 會被完整處理(https://github.com/nathanmarz/storm/wiki/Guaranteeing-message- processing)。 此外,通過TransactionalTopology(https://github.com/nathanmarz/storm/wiki /Transactional-topologies) ,Storm可以保證每個tuple“被且僅被處理一次”。
?
5. Opensource
?
這個就不用多說了,開源使得Storm社區及其活躍,到本文寫作的時候,Storm已經發展到了0.81,Storm的使用者已經有了一個長長的名單( https://github.com/nathanmarz/storm/wiki/Powered-By ),其中不乏比如淘寶,支付寶,Twitter,Groupon這種互聯網巨頭。
?
6. Clojure基礎上的實現
?
Storm的核心代碼是Clojure和Java。Clojure是一門JVM基礎上的函數式編程語言( http://clojure.org/ ), 是支持STM(SoftwareTransactional Memory)的少數幾門語言之一。Clojure推出以來,得到了廣泛關注,人們普遍認為,其函數式編程所具有的各種特性能在分布式環境中大有用武之 地, 而Storm則給出了一個很好的實例。從另一個角度來說,Storm也能大大的推動Clojure的普及。
?
總言之,時勢造英雄,Storm在正確的時間出現在了正確的地點,而且剛剛好做了正確的事情,想不紅都沒有道理。
?
高層架構
?
從高來看storm的架構:
?
?
指南
?
在這個指南中,你將學到如何創建strom架構和部署它的集群。Java將是示例中用到的主要語言,在其它的一些示例中將使用python來描述strom支持多語言的能力。
?
先安裝strom,可以參考:
?
http://my.oschina.net/leejun2005/blog/147607?from=20130804
?
上面的文章里面已經描述的很清楚了。
?
可以先從示例storm-starter開始學習strom。
?
地址是:
?
https://github.com/nathanmarz/storm-starter
?
先決條件
?
你需要安裝git和java然后設置這個用戶的環境變量。另外還有兩個示例需要安裝python和ruby。
?
然后創建新目錄下載storm-starter
?
$ git clone git: // github.com/nathanmarz/storm-starter.git && cd storm-starter
?
storm-starter概述
?
storm-starter包含很多使用storm的示例。如果你第一次使用storm,首先了解一下它的架構:
?
- ExclamationTopology : Java編寫的基本示例
- WordCountTopology : 和python一起使用的例子
- ReachTopology : 復雜的DRPC的例子
?
當你熟悉了上面的示例之后,可以在in? src/jvm/storm/starter/ ?下例如 RollingTopWords ?去熟悉一些更高級的實現。
?
如果你要學習更多的示例,可以到 Storm project page .
?
使用storm-starter
?
使用storm-starter有多種方式,可以使用Leiningen或者maven。這里使用maven。
?
首先編譯:
?
mvn -f m2-pom.xml compile exec:java -Dexec.classpathScope=compile -Dexec.mainClass=storm.starter.WordCountTopology
?
然后打包:
?
mvn -f m2-pom.xml package
?
運行測試:
?
mvn -f m2-pom.xml test
?
然后就是把打包的jar包發送到storm里運行了。
?
正在討論的架構
?
下面就是我們正在處理的項目中使用的架構,還在討論階段,也希望對這個有見解的童鞋發表一下自己的觀點:
?
?
古有“即生瑜,何生亮”,不過我覺得如果沒有瑜和亮,可能誰都無法打敗曹操,和現在的架構一下,如果不是把流框架storm和任務處理框架hadoop結合起來,也許處理實時的大數據真的很難!
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
