Twitter Storm:單機環境的安裝與配置

  很久沒寫博客了,這一段時間一直被導師push着作畢業設計。因爲目前的方向偏向於圖像識別檢索,畢設打算作一個基於分佈式計算平臺的圖像檢索系統,查閱相關資料發現Hadoop不適用於實時的計算環境,而Twitter Storm卻可以知足本身的需求。我花了大概3~4天的時間,纔將一個單機環境下的Storm平臺部署好,期間經歷了各類各樣的「奇葩」的錯誤,此外,網上相關的Storm配置文章各類各樣,敘述得多少有些不完整,爲此我特下下這篇博客,記錄整個安裝過程,和你們分享。java

1 準備階段

  在配置一個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.1(a) Java 1.6的安裝與配置

  (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.1(b)  Java 1.7的安裝配置

  (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)相同。

1.2 Python 2.7+的安裝

  Ubuntu 12,.04中已經自帶了Python 2.7.3,無需再安裝;對於其餘系統或者Python版本較低的,此步驟須要安裝Python 2.7+的版本。

1.3 其餘相關軟件的安裝

  在咱們安裝Storm的過程當中,須要其餘一些小的軟件包,例如,automake、g++、build-essential、uuid-dev、unzip、autoconf等等,這些軟件在以後的過程若是缺失的話,會出現相關的提示,那樣的話,提示缺乏哪些軟件,就安裝相應的軟件包便可。

2 ZooKeeper的安裝配置

  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。

3 ZeroMQ的安裝

  我使用的版本是zeromq-2.1.7,下載,解壓,進入目錄,輸入:

>>./autogen.sh
>>./configure  
>>make  
>>sudo make install  

4 jzmq的安裝

>>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  

5 Storm

  我使用的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添加環境變量,來方便咱們的啓動、中止。

5.1 啓動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運行期間的相關信息。

6 運行第一個Topology程序

  網上別的資料介紹了許多方式來編譯可執行的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~

相關文章
相關標籤/搜索