twitter storm安裝和storm-start的本地運行

storm有兩種操作模式: 本地模式和遠程模式。使用本地模式的時候,你可以在你的本地機器上開發測試你的topology, 一切都在你的本地機器上模擬出來; 用遠端模式的時候你提交的topology會在一個集羣的機器上執行。

一個storm開發環境安裝了你使用本地模式開發測試topology; 把topology打包以部署到遠端的集羣; 提交,終止遠端集羣上的topology所需要的一切東西。

讓我們快速看一下你的機器和遠端storm集羣之間的關係。storm集羣是被一個稱作Nimbus的控制節點所管理的。你的機器與nimbus通信以提交topology的代碼,運行這個topology,而nimbus會自動在集羣內部分發你的topology代碼, 分配任務給各個機器。你的機器使用一個稱爲storm的客戶端去和nimbus通信。storm只有在遠程模式的時候纔有用; 對於用本地模式開發、測試topology來說是沒什麼用的。

這裏介紹一下storm的基本安裝和不用lein的storm-starter運行方法。

1. 安裝Storm依賴庫

需要在Nimbus和Supervisor機器上安裝Storm的依賴庫,具體如下:

  1. ZeroMQ 2.1.7 – 請勿使用2.1.10版本,因爲該版本的一些嚴重bug會導致Storm集羣運行時出現奇怪的問題。少數用戶在2.1.7版本會遇到"IllegalArgumentException"的異常,此時降爲2.1.4版本可修復這一問題。
  2. JZMQ
  3. Java 6
  4. Python 2.6.6
  5. unzip
以上依賴庫的版本是經過Storm測試的,Storm並不能保證在其他版本的Java或Python庫下可運行。

1.1 安裝ZMQ2.1.7

下載後編譯安裝ZMQ:
wget http://download.zeromq.org/zeromq-2.1.7.tar.gz
tar -xzf zeromq-2.1.7.tar.gz
cd zeromq-2.1.7
./configure
make
sudo make install

注意事項:

1. 如果安裝過程報錯uuid找不到,則通過如下的包安裝uuid庫:

sudo yum install e2fsprogsl  -b current
sudo yum install e2fsprogs-devel  -b current

2.如果報錯

configure: error: in `/usr/local/download/zeromq-2.1.7':

configure: error: no acceptable C compiler found in $PATH

See `config.log' for more details

原因爲沒有安裝c compiler

解決方法

# yum install gcc*

3.如果遇到Error:cannot link with -luuid, install uuid-dev

原因爲缺少uuid相關package

解決方法

# yum install uuid*

# yum install e2fsprogs*

# yum install libuuid*

1.2. 安裝JZMQ

下載後編譯安裝JZMQ:
git clone https://github.com/nathanmarz/jzmq.git
cd jzmq
./autogen.sh
./configure
make
sudo make install

爲了保證JZMQ正常工作,可能需要完成以下配置:

  1. 正確設置 JAVA_HOME環境變量
  1. 安裝Java開發包
  1. 升級autoconf
  1. 如果你是Mac OSX,參考這裏

注意事項:

1. 如果運行./configure命令出現問題,參考這裏

2.如果報錯autogen.sh: error: could not find libtool. libtool is required to run autogen.sh.

缺少libtool

# yum install libtool*

1.3. 安裝Java6

1. 下載並安裝JDK 6,參考這裏

2. 配置JAVA_HOME環境變量;

3. 運行java、javac命令,測試java正常安裝。

1.4. 安裝python2.7.2

1. 下載Python2.6.6:

wget http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tar.bz2

2. 編譯安裝Python2.6.6:

tar –jxvf Python-2.6.6.tar.bz2
cd Python-2.6.6
./configure
make
make install

3. 測試Python2.6.6:

$ python -V
Python 2.6.6

1.5. 安裝unzip

1. 如果使用RedHat系列Linux系統,執行以下命令安裝unzip:
apt-get install unzip
2. 如果使用Debian系列Linux系統,執行以下命令安裝unzip:
yum install unzip

2. 安裝Zookeeper

2.1. 安裝Zookeeper

# wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
# tar zxf zookeeper-3.3.3.tar.gz
# cp -R zookeeper-3.3.3 /usr/local/
# ln -s /usr/local/zookeeper-3.3.3/ /usr/local/zookeeper

設置 ZOOKEEPER_HOME 和$ZOOKEEPER_HOME/bin
#vi ~/.bashrc



追加
export ZOOKEEPER_HOME="/path/to/zookeeper"
export PATH=$PATH:$ZOOKEEPER_HOME/bin
用zoo_sample.cfg製作$ZOOKEEPER_HOME/conf/zoo.cfg
#cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
製作dataLogDir和運行Dir 
sudo mkdir /tmp/zookeeper
sudo mkdir /var/log/zookeeper

2.2.. 搭建Zookeeper集羣

Storm使用Zookeeper協調集羣,由於Zookeeper並不用於消息傳遞,所以Storm給Zookeeper帶來的壓力相當低。大多數情況下,單個節點的Zookeeper集羣足夠勝任,不過爲了確保故障恢復或者部署大規模Storm集羣,可能需要更大規模節點的Zookeeper集羣(對於Zookeeper集羣的話,官方推薦的最小節點數爲3個)。在Zookeeper集羣的每臺機器上完成以下安裝部署步驟:

1)下載安裝Java JDK,官方下載鏈接爲http://java.sun.com/javase/downloads/index.jsp,JDK版本爲JDK 6或以上。

2)根據Zookeeper集羣的負載情況,合理設置Java堆大小,儘可能避免發生swap,導致Zookeeper性能下降。保守期間,4GB內存的機器可以爲Zookeeper分配3GB最大堆空間。

3)下載後解壓安裝Zookeeper包,官方下載鏈接爲http://hadoop.apache.org/zookeeper/releases.html

4)根據Zookeeper集羣節點情況,創建如下格式的Zookeeper配置文件zoo.cfg:

tickTime=2000
dataDir=/var/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

其中,dataDir指定Zookeeper的數據文件目錄;其中server.id=host:port:port,id是爲每個Zookeeper節點的編號,保存在dataDir目錄下的myid文件中,zoo1~zoo3表示各個Zookeeper節點的hostname,第一個port是用於連接leader的端口,第二個port是用於leader選舉的端口。

5)在dataDir目錄下創建myid文件,文件中只包含一行,且內容爲該節點對應的server.id中的id編號。

6)啓動Zookeeper服務:

java -cp zookeeper.jar:lib/log4j-1.2.15.jar:conf \ org.apache.zookeeper.server.quorum.QuorumPeerMain zoo.cfg

也可以通過bin/zkServer.sh腳本啓動Zookeeper服務。

7)通過Zookeeper客戶端測試服務是否可用:

  • Java客戶端下,執行如下命令:

java -cp zookeeper.jar:src/java/lib/log4j-1.2.15.jar:conf:src/java/lib/jline-0.9.94.jar \ org.apache.zookeeper.ZooKeeperMain -server 127.0.0.1:2181

也可以通過bin/zkCli.sh腳本啓動Zookeeper Java客戶端。

  • C客戶端下,進入src/c目錄下,編譯單線程或多線程客戶端:
./configure
make cli_st
make cli_mt
運行進入C客戶端:
cli_st 127.0.0.1:2181
cli_mt 127.0.0.1:2181

至此,完成了Zookeeper集羣的部署與啓動。

注意事項:

  1. 由於Zookeeper是快速失敗(fail-fast)的,且遇到任何錯誤情況,進程均會退出,因此,最好能通過監控程序將Zookeeper管理起來,保證Zookeeper退出後能被自動重啓。詳情參考這裏
  2. Zookeeper運行過程中會在dataDir目錄下生成很多日誌和快照文件,而Zookeeper運行進程並不負責定期清理合並這些文件,導致佔用大量磁盤空間,因此,需要通過cron等方式定期清除沒用的日誌和快照文件。詳情參考這裏。具體命令格式如下:java -cp zookeeper.jar:log4j.jar:conf org.apache.zookeeper.server.PurgeTxnLog <dataDir> <snapDir> -n <count>

3. 安裝storm

需要在Nimbus和Supervisor機器上安裝Storm發行版本。

自從Github不提供下載功能之後,Twitter Storm的release都被放到了Dropbox上面,由於大家都知道的原因,不那啥一下你是訪問不到了,這裏有一個下載鏡像:http://xumingming.sinaapp.com/twitter-storm-downloads-cn-mirror/,當前的穩定版本是0.8.2。
如果你想從你的機器提交topology給遠端的storm集羣, 你應該在你的本地安裝一個storm發行版。安裝了storm發行版之後你會得到你和遠端集羣通信的工具: storm。爲了在本地安裝storm, 從上面的鏈接中下載代碼,並且把它解壓到你機器上的一個目錄。然後把bin/目錄添加到環境變量PATH裏面去並且使bin/storm有可執行權限。

unzip storm-0.8.2.zip
export STORM_HOME=/usr/local/storm-0.8.2
export PATH=$STORM_HOME/bin:xxx:xxx:$PATH

4. 本地運行測試程序storm-starter

執行這個程序需要用lein,這裏介紹的方法用eclipse代替lein的作用。

可以使用maven或lein來解決storm-starter的包依賴問題,但是由於GFW原因,可能有些依賴包無法獲取。故這裏採用eclipse自導入包的方法來編譯storm-starter
1)  安裝twitter4j

# mkdir twitter4j
# cd twitter4j
# wget http://twitter4j.org/en/twitter4j-2.2.6.zip
# unzip twitter4j-2.2.6.zip

很有可能下載不了,在網上搜一搜。

2) 追加源文件storm-start/src/jvm/storm
    使用eclipse建立java project。追加twitter4j和storm的jar文件。
    File-> New -> Java Project ->隨便取個名字-> Next -> Libraries -> add External JARs...-> 追加twitter4j和storm的jar文件(/path/to/twitter4j/lib/*.jar和/path/to/storm/lib/*.jar和/path/to/storm/storm-{version}.jar)-> Finsh
    導入storm-start
    File -> Import -> General -> File System -> Next -> Browse(From directory) -> /path/to/storm-start/src/jvm/storm -> Browse(Info floder)  -> xxx -> src -> OK -> “storm” 和 “Create top-level folder”前打勾 -> Finish
完成之後如圖:

3) 追加源文件storm-start/multilang/resources(python 文件word count用)
    File -> Import -> General -> File System -> Next -> Browse(From directory) -> /path/to/storm-start/multilang/resources -> Browse(Info floder)  -> xxx -> OK -> check “resources” and “Create top-level folder” -> Finish
2個源文件都追加好之後,eclipse左邊顯示如下圖:

如果使用的是storm-0.8.1,下面這行代碼會報錯,下載0.8.2版本即可解決

import backtype.storm.task.IMetricsContext;

如果下面這行報錯,說明沒有commons-collections.jar包,下載地址:http://commons.apache.org/proper/commons-collections/download_collections.cgi

import org.apache.commons.collections.buffer.CircularFifoBuffer;

4) JAR export
    File -> Export -> JAR -> JAR file -> 取消 “.classpath” ,“.project” 和 “<.settings” ->的勾 browse -> path/to/export/name.jar -> Finish (忽視 warnings)

可能會報錯說PrintSampleStream和TwitterSampleSpout這兩個類找不到,將這兩個類的註釋取消掉即可。

4. 執行剛纔編譯的文件。

# storm jar StormStarter.jar storm.starter.ExclamationTopology
如果出現類似下面的文字,說明運行成功!
....
11367 [Thread-25] INFO  backtype.storm.daemon.task  - Emitting: class storm.starter.ExclamationTopology$ExclamationBolt source: 2:3, stream: 1, id: {}, [golda!!!]
....


參考鏈接:

https://github.com/nathanmarz/storm/

https://github.com/nathanmarz/storm/wiki

https://github.com/nathanmarz/storm/wiki/Setting-up-development-environment

https://github.com/nathanmarz/storm-starter/

Twitter Storm下載中文鏡像
Twitter Storm: 配置開發環境

Storm集羣安裝部署步驟【詳細版】

centos的twitter storm安裝和storm-start的本地運行

Storm 環境配置及Storm starter運行

Storm環境部署




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章