Storm 官方提供了入門代碼(Storm starter),即 Storm安裝教程 中所運行的實例(storm-starter-topologies-0.9.6.jar),該入門代碼位於 /usr/local/storm/examples/storm-starter/ 中,包含多個例子,對於學習 Storm 頗有幫助。同時官方也有給出了詳細的使用說明(上述目錄下的 README.markdown 文件),本教程基本是按照官方使用說明來介紹如何使用 Maven 來編譯代碼,以運行於 Storm 中。html
Maven 是如今 Java 社區中最強大的項目管理和項目構建工具。咱們在開發項目的過程當中,會使用一些開源框架、第三方的工具等等,這些都是以 jar 包的方式被項目所引用,而且有些 jar 包還會依賴其餘的 jar 包,咱們一樣須要添加到項目中,全部這些相關的 jar 包都會做爲項目的依賴。一般,一個 Java EE 項目所依賴的 jar 包會有不少。然而,這還並不是是主要問題,在管理這些 jar 包過程當中,jar 包的版本每每是最使人頭疼的問題。選擇一個 jar 包的版本,須要考慮它所依賴的 jar 包是否支持這個版本,而且還須要確認依賴它的 jar 包能不能對這個版本兼容,難以進行部署與管理。java
Maven 的出現,解決了開發過程當中的這一難題。它能夠對項目依賴的 jar 包進行管理,可讓你的項目保持基本的依賴,排除冗餘 jar 包,而且可讓你很是輕鬆的對依賴的 jar 包進行版本升級。而這些僅僅是 Maven 最基本的功能,它能夠在這基礎上對項目進行清理、編譯、測試、打包、發佈等等構建項目的工做。git
Maven 是經過 pom.xml (Project Object Model,項目對象模型)來對項目進行配置的,能夠查看 storm-starter 目錄下的 pom.xml 來查看運行該入門代碼所需的各類 jar 包。github
Maven的官方下載地址爲http://maven.apache.org/download.cgi,直接下載地址爲:http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz 或http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz。apache
下載後執行以下命令進行安裝:vim
安裝後即可使用(須要配置好 JDK 1.7 環境),爲方便,咱們將 maven 命令加入 PATH 變量中。執行 vim ~/.bashrc
,在最後面加上一行 export PATH=/usr/local/maven/bin:$PATH,以下圖所示。bash
markdown
保存文件後執行 source ~/.bashrc
,接着執行 mvn -v
檢驗,安裝成功的話會顯示以下圖內容:網絡
框架
Maven 的官方鏡像比較慢,建議使用 開源中國 Maven 庫 提供的鏡像,速度比較快,避免因網絡問題沒法下載依賴包,更改鏡像只須要修改 Maven 的配置文件(vim /usr/local/maven/conf/setting.xml)便可。此外,筆者實踐時,發現 Storm 所需的部分依賴包須要從 clojars.org 下載,但該網站的證書有問題,致使經過 https 沒法下載,須要在配置文件中將該源的訪問方式改成 http 訪問。
修改 Maven 的配置文件(vim /usr/local/maven/conf/setting.xml
),在 <mirrors> … </mirrors> 間增長以下內容:
並在 <profile> … </profile> 間增長以下內容:
修改後保存配置文件就能夠了。
該配置註釋文本較多,看起來比較凌亂,不方便更改,若是有須要,也能夠下載筆者修改好的版本,下載地址:http://pan.baidu.com/s/1qXwZlsK,下載後執行以下命令替換配置文件:
在此以前請先開啓 Storm (即開啓 zookeeper,nimbus 和 supervisor),並肯定系統處於聯網狀態,由於在編譯過程當中須要下載很多依賴包。
接着咱們開始使用 maven 編譯、運行 Storm starter。咱們只須要進入 storm starter 所在目錄,再執行相應的 mvn 命令,並指定參數便可,以運行 Storm starter 中的 WordCount 爲例(WordCount 源碼位於:/usr/local/storm/examples/storm-starter 下的 src/jvm/storm/starter/WordCountTopology.java):
mvn 命令須要在項目的根目錄中運行,即在 storm-starter 目錄中運行,該命令會查找當前目錄下的 pom.xml 文件,下載所須要的依賴包。
首次運行須要下載較多東西,以下圖所示,請耐心等待。
若是遇到網絡錯誤,致使有些依賴包沒法下載或下載不完整,編譯結束時會提示以下圖的 ERROR 信息(Failed to execute goal on project storm-starter: Could not resolve dependencies for project org.apache.storm:storm-starter:jar:0.9.6: The following artifacts could not be resolve…),此時能夠從新運行上述代碼再試幾回。
通常會出現網絡問題都是因爲沒法訪問 clojars.org,編譯過程當中會提示錯誤 「信息: I/O exception (java.net.SocketException) caught when processing request to {}->http://clojars.org:80: 網絡不可達」。
若是屢次嘗試均沒法正常下載的話,請下載筆者的離線依賴包,解壓到本地的依賴庫中(本地依賴庫位置爲 ~/.m2/),能夠解決該問題(Maven 查找依賴包時,首先查找的是本地已下載的依賴包,缺乏的再從網絡中下載)。下載地址:http://pan.baidu.com/s/1eQWVe3w(筆者提供的依賴包僅適合於 Storm 0.9.6 版本)。
下載後,若是還在進行編譯須要先中斷,而後執行以下命令解壓依賴包,解壓後再次編譯應該就能成功了:
編譯成功後,緊接着就會在 Storm 中運行,咱們能看到不斷輸出的 INFO 信息,編譯最後若是是出現以下 BUILD FAILURE 信息:
... 22125 [SessionTracker] INFO org.apache.storm.zookeeper.server.SessionTrackerImpl - SessionTrackerImpl exited loop! [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ ...
通常是沒有問題的,程序有正確執行。咱們能夠再運行一次,執行以下代碼,用 grep 命令進行過濾,只查看重要的運行結果:
此時不須要再下載這麼多東西,編譯很快完成。咱們只輸出單詞統計信息,能夠看到輸出結果與 Storm安裝教程 中運行實例時是一致的,說明編譯正確。
咱們也能夠將代碼打包成 jar,打包後能夠直接提交到 Storm 中運行。在 storm starter 所在目錄中執行以下命令(這樣打包的是整個 Storm starter):
打包完成後,會在 target 文件中生成 storm-starter-0.9.6.jar 和 storm-starter-0.9.6-with-dependencies.jar,就能夠把 jar 包提交到 Storm 中運行了。
後續咱們編寫本身的代碼時,建議使用 maven 來方便的編譯、運行代碼。另外,官方使用說明中有更爲詳細的一些說明,如在 Intellij 中運行 Storm starter,有須要的能夠自行查看。
總的來講,Storm starter 提供了很好的代碼(源代碼是在 storm-starter/src/jvm/storm/starter/ 中),例如RollingTopWords,給咱們本身編寫 Storm 代碼提供了一個很好的借鑑。