1. 程式人生 > >Storm 單機環境的安裝與配置

Storm 單機環境的安裝與配置

好久沒寫部落格了,這一段時間一直被導師push著做畢業設計。由於目前的方向偏向於影象識別檢索,畢設打算做一個基於分散式計算平臺的影象檢索系統,查閱相關資料發現Hadoop不適用於實時的計算環境,而Twitter Storm卻能夠滿足自己的需求。我花了大概3~4天的時間,才將一個單機環境下的Storm平臺部署好,期間經歷了各種各樣的“奇葩”的錯誤,此外,網上相關的Storm配置文章各種各樣,敘述得多少有些不完整,為此我特下下這篇部落格,記錄整個安裝過程,和大家分享。

1 準備階段

  在配置一個Storm環境之前,我們首先需要一個Linux作業系統。我使用的是Ubuntu 12.04,系統最好是全新安裝的,以防止各種各種別的問題。因為我手頭上有兩個版本的Ubuntu:11.10和12.04,。在11.10上安裝後,supervisor程序總是丟擲異常,也搞不清楚是作業系統版本的問題還是別的軟體的影響。因此,為了減少問題的出現,我建議系統使用全新的。此外,儘量保證作業系統處於聯網狀態,否則Storm在執行時會丟擲網路不可達的SocketException。

  PS:CentOS也可以,但是我沒有在上面嘗試過。有興趣的讀者可以自行嘗試一下。

  Storm需要JVM的支援,選擇Java 1.6或者Java 1.7都可以。下面是Java的安裝過程與環境變數的配置,如果你不知道的話或者不像去其他地方查閱資料的話,可以參考下面的安裝步驟。

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.執行安裝檔案:

>>/home/chenny/java1.6.0_37.bin

  (3)環境設定,開啟/etc/profile檔案:

>>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   |   make[1]: *** 沒有規則可以建立“all”需要的目標“org/zeromq/ZMQ$Context.class”。 停止。
        修正方法,進入src目錄,手動編譯相關java程式碼:

javac  ./src/org/zeromq/*.java  

5 Storm

  我使用的Storm版本是最新的穩定版0.8.2,下載

wget https://www.dropbox.com/s/fl4kr7w0oc8ihdw/storm-0.8.2.zip

,解壓,修改/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~