很久沒寫博客了,這一段時間一直被導師push着作畢業設計。因爲目前的方向偏向於圖像識別檢索,畢設打算作一個基於分佈式計算平臺的圖像檢索系統,查閱相關資料發現Hadoop不適用於實時的計算環境,而Twitter Storm卻可以知足本身的需求。我花了大概3~4天的時間,纔將一個單機環境下的Storm平臺部署好,期間經歷了各類各樣的「奇葩」的錯誤,此外,網上相關的Storm配置文章各類各樣,敘述得多少有些不完整,爲此我特下下這篇博客,記錄整個安裝過程,和你們分享。java
在配置一個Storm環境以前,咱們首先須要一個Linux操做系統。我使用的是Ubuntu 12.04,系統最好是全新安裝的,以防止各類各類別的問題。由於我手頭上有兩個版本的Ubuntu:11.10和12.04,。在11.10上安裝後,supervisor進程老是拋出異常,也搞不清楚是操做系統版本的問題仍是別的軟件的影響。所以,爲了減小問題的出現,我建議系統使用全新的。此外,儘可能保證操做系統處於聯網狀態,不然Storm在運行時會拋出網絡不可達的SocketException。linux
PS:CentOS也能夠,可是我沒有在上面嘗試過。有興趣的讀者能夠自行嘗試一下。git
Storm須要JVM的支持,選擇Java 1.6或者Java 1.7均可以。下面是Java的安裝過程與環境變量的配置,若是你不知道的話或者不像去其餘地方查閱資料的話,能夠參考下面的安裝步驟。github
(1)下載,在http://www.oracle.com/technetwork/indexes/downloads裏下載須要的linux的java版本瀏覽器
(2)安裝(假設下載的文件爲java1.6.0_37.bin,放在/home/chenny目錄下)服務器
a.將下載的安裝文件受權爲能夠執行:網絡
>>sudo chmod u+x java1.6.0_37.bin
b.改變工做目錄到你要安裝java的地方,個人是/usr/lib,因此是cd /usr/lib
c.運行安裝文件:oracle
>>/home/chenny/java1.6.0_37.bin
(3)環境設置,打開/etc/profile文件:jvm
>>sudo gedit /etc/profile
在文件最後增長以下幾行:分佈式
export JAVA_HOME=/usr/lib/jdk1.6.0_37 export JRE_HOME=/usr/lib/jdk1.6.0_37/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
(4)替換系統原有的OpenJDK
>>sudo update-alternatives --install /usr/bin/java java /usr/lib/jdk1.6.0_37/bin/java 300 >>sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jdk1.6.0_37/bin/javac 300 >>sudo update-alternatives --config java
而後輸入咱們須要的那個JDK做爲默認便可。注意,若是在終端中輸入命令的時候,系統提示沒有權限操做,那咱們使用sudo以超級用戶的身份運行便可。
(5)註銷系統或者重啓機器,在終端中鍵入java -version獲得java version "1.6.0_37"的話表示安裝好java環境了.
(1)去官網下載JDK,我下載的版本是最新的,jdk-7u21-linux-i586.tar.gz。
(2)解壓其到咱們想要存放的目錄:
>>sudo mkdir /usr/lib/jvm
>>tar zxvf ./jdk-7u21-linux-i586.tar.gz -C /usr/lib/jvm
(3)此後的步驟與1.1(a)中的(3)-(5)相同。
Ubuntu 12,.04中已經自帶了Python 2.7.3,無需再安裝;對於其餘系統或者Python版本較低的,此步驟須要安裝Python 2.7+的版本。
在咱們安裝Storm的過程當中,須要其餘一些小的軟件包,例如,automake、g++、build-essential、uuid-dev、unzip、autoconf等等,這些軟件在以後的過程若是缺失的話,會出現相關的提示,那樣的話,提示缺乏哪些軟件,就安裝相應的軟件包便可。
Ubuntu12.04中自帶的有一個zookeeper,不知道幹什麼用的,不放心的話,可使用sudo apt-get remove zookeeper先將其移除。我使用的版本是zookeeper 3.3.5,下載以後,咱們將其解壓到相應位置,爲了使用方便,咱們能夠按照安裝Java的過程爲ZooKeeper配置環境變量:
>>sudo gedit /etc/profile
在其中添加:
export ZOOKEEPER_HOME=/home/chenny/Storm/zookeeper-3.3.5 export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$JRE_HOME/bin:$PATH
將zookeeper-3.4.5/conf目錄下面的 zoo_sample.cfg修改成zoo.cfg,配置文件內容以下所示:
tickTime=2000 dataDir=/home/chenny/Storm/tmp/zookeeper clientPort=2181 initLimit=5 syncLimit=2
每一個變量的含義能夠參見配置文件中的註釋。在此再也不贅述。使用:
>>zkServer.sh start
來啓動ZooKeeper服務器,若是在啓動過程當中,提示找不到/etc/zookeeper/zoo.cfg這個配置文件,咱們就須要將上面修改過的zoo.cfg拷貝到/etc/zookeeper下:
>>sudo cp -R /home/chenny/Storm/zookeeper-3.3.5/conf/zoo.cfg /etc/zookeeper
而後再次啓動服務,此時就能夠了。而後使用:
>>zkServer.sh status
來查看服務器狀態,此時服務器的模式(Mode)應該是standalone。咱們可使用
>>zkCli.sh
來鏈接服務器,若是在這個過程當中沒有拋出異常的話,就說明咱們可以正確地配置了Zookeeper。
我使用的版本是zeromq-2.1.7,下載,解壓,進入目錄,輸入:
>>./autogen.sh >>./configure >>make >>sudo make install
>>git clone https://github.com/nathanmarz/jzmq.git >>cd jzmq >>./autogen.sh >>./configure >>make >>sudo make install
安裝時,可能碰到兩個錯誤:
(1).make[1]: *** 沒有規則能夠建立「org/zeromq/ZMQ.class」須要的目標「classdist_noinst.stamp」。 中止
修正方法,建立classdist_noinst.stamp文件:
touch src/classdist_noinst.stamp
(2).錯誤:沒法訪問 org.zeromq.ZMQ
修正方法,進入src目錄,手動編譯相關java代碼:
javac -d ./src/org/zeromq/*.java
我使用的Storm版本是最新的穩定版0.8.2,下載,解壓,修改/conf/storm.yaml配置文件:
storm.zookeeper.servers: - "192.168.1.117" nimbus.host: "192.168.1.117" storm.local.dir: "/home/chenny/Storm/tmp/storm" java.library.path: "/usr/local/lib:/opt/local/lib:/usr/lib" topology.debug: "true"
須要注意的是Storm讀取此配置文件,要求每一行開始都要有一個空格,每個冒號後面也要有一個空格,不然就會出現錯誤,形成啓動失敗。咱們一樣能夠爲Storm添加環境變量,來方便咱們的啓動、中止。
>>storm nimbus& >>storm supervisor& >>storm ui&
若是咱們沒有爲storm添加環境變量,那麼在啓動的時候,咱們就須要使用絕對路徑或相對路徑來定位/chenny/Storm/storm-0.8.2/bin/storm這個程序。啓動完成後,咱們可使用jps來查看進程狀態:
>>jps
在沒有運行任務時,咱們必須應該要看到5個進程:QuorumPeerMain、nimbus、core、Jps、supervisor。不然就須要檢查是否正確地啓動,若是啓動以後沒有過多久就中止了,咱們就須要查看~/storm-0.8.2/logs下面的對應的log文件,查看引發異常的緣由是什麼,而後解決後再次啓動。
同時,咱們能夠在瀏覽器中輸入http://127.0.0.1:8080來進入Storm UI的界面,能夠查看Storm運行期間的相關信息。
網上別的資料介紹了許多方式來編譯可執行的Topology程序,咱們這裏提供一個簡單的辦法,只須要使用Eclipse和相關的Jar包便可,Ubuntu或者Windows環境下都可。咱們須要從github上下載下來一個供初學者學習的storm-starter,同時,咱們還須要有commons-collections-3.2.1-bin.tar.gz、twitter4j-2.2.6.zip和storm-0.8.2.zip等軟件包,若是沒有的話,須要去下載。以Windows XP下的Eclipse爲例。首先咱們將全部須要的包解壓放到桌面,打開Eclipse,新建Java Project,名字任意取,我取名叫作MyFirstStormApp,而後點擊Finish。
在MyFirstStormApp上右鍵,選擇Import,而後選擇File System:
在From Directory中輸入相應的路徑或者點擊Browse,選擇路徑:
咱們依次展開storm-starter-master/src/jvm/storm,選中jvm文件夾,點擊肯定,而後勾選jvm,點擊finish:
這樣,咱們就在左側看到Project的結構:
拖動storm到src中,而後安裝一樣的方式將storm-starter-master/storm-starter-master/multilang導入到項目中,而後咱們就在左側看到以下圖所示的結構:
能夠看到上面有不少紅叉,此時,咱們就須要導入項目所依賴的jar包,在項目上右鍵,選擇Properties,而後Java Build Path,切換到Libraries選項夾下,點擊Add External JARs:
將storm-0.8.2/lib目錄下的全部jar包都加入到項目中,將commons-collections-3.2.1.jar添加到項目中,將twitter4j-2.2.6/lib中的全部jar包加入到項目中,將storm-0.8.2/storm-0.8.2.jar加入到項目中,而後點擊OK,這個時候,能夠看到項目中的全部錯誤都消失了。接下來,咱們將PrintSampleStream.java和TwitterSampleSpout.java中的註釋取消,或者將這兩個文件刪除。
在項目上選擇Export,而後選擇JAR file,在下一頁,咱們將項目導出,勾選以下圖所示:
點擊finish後,若是沒有錯誤,只有warning的話,就不用管了,不然咱們須要檢查錯誤,而後從新打包。打包後的jar包是MyFirstStormApp.jar,將它拷貝到部署有Storm的機器上,而後在終端中輸入:
>>storm jar MyFirstStormApp.jar storm.starter.WordCountTopology test2
若是沒有錯誤,就成功提交了,在瀏覽器中輸入http://127.0.0.1:8080,能夠看到這個Topology已經在運行了,點擊它的名字,能夠進入Topology summary:
若是看到有Emiited等數據,就說明咱們正確地完成了配置。Enjoy~