天天看點

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題

先簡單的把本文要做的事羅列一下:

1. 安裝zookeeper叢集

2. 安裝Storm叢集,包括一個Storm的nimbus,在nimbus上啟用Storm UI 和兩個supervisor

3. 跑一個小例子證明安裝完成

注:

本例中,nimbus機器IP為10.1.110.24, 兩個supervisor分别為10.1.110.21和10.1.110.22。後文不再用通配符寫IP。請自行更換IP。

準備工作

1. 下載下傳zookeeper3.4.5(如果你比較懶,猛擊 這裡) 2. 下載下傳Storm目前最新0.9.0.1 (猛擊 這裡) 3. 安裝被配置好JDK(最低版本1.6)   注: Storm0.9之前的版本,底層通訊用的是ZeroMQ,是以還得去裝一個老版本的ZeroMQ(2.1.7,不能裝太新的)。 由于ZeroMQ的各種問題,新版支援用Netty替代ZeroMQ。性能上據說能提高兩倍。但是預設仍是ZeroMQ,Netty方式需要配置來啟用。 github上面安裝文檔并沒有更新,是以,如果要裝老版的,可以參考這裡: https://github.com/nathanmarz/storm/wiki/Installing-native-dependencies 新版的release note: http://storm-project.net/2013/12/08/storm090-released.html

安裝ZK

1. 登陸到10.1.110.21并解壓tar包(注意給執行權限) 2. 建立zookeeper的data目錄,本文以  /var/tmp/zkdata 為例 [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. mkdir -p /var/tmp/zkdata  

3. 建立zk叢集的myid檔案 (單機版可以跳過該步) [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. cd /var/tmp/zkdata  
  2. echo 1 > myid  

4. 拷貝zookeeper的conf/zoo_sample.cfg并重命名為zoo.cfg,修改如下:   [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. # The number of milliseconds of each tick  
  2. tickTime=2000  
  3. # The number of ticks that the initial   
  4. # synchronization phase can take  
  5. initLimit=10  
  6. # The number of ticks that can pass between   
  7. # sending a request and getting an acknowledgement  
  8. syncLimit=5  
  9. # the directory where the snapshot is stored.  
  10. # do not use /tmp for storage, /tmp here is just   
  11. # example sakes.  
  12. dataDir=/var/tmp/zkdata  
  13. # the port at which the clients will connect  
  14. clientPort=2181  
  15. server.1=10.1.110.21:2888:3888  
  16. server.2=10.1.110.22:2888:3888  
  17. server.3=10.1.110.24:2888:3888  
  18. ## Be sure to read the maintenance section of the   
  19. # administrator guide before turning on autopurge.  
  20. ## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html  
  21. #sc_maintenance  
  22. ## The number of snapshots to retain in dataDir  
  23. #autopurge.snapRetainCount=3  
  24. # Purge task interval in hours  
  25. # Set to "0" to disable auto purge feature  
  26. #autopurge.purgeInterval=1  

  dataDir是配置zk的資料目錄的 server.A=B:C:D是叢集zk使用的。如果你隻想用單個zk,可以不配置。 A - 是一個數字,表示這是第幾号伺服器。與/var/tmp/zkdata下的myid檔案内容一緻 B - 是該伺服器的IP位址 C - 表示該伺服器與叢集中的Leader伺服器交換資訊的端口 D - 表示如果萬一叢集中的Leader伺服器挂了,需要各伺服器重新選舉時所用的通訊端口   5.  (Optional)将zk的bin目錄路徑加入環境變量 修改/etc/profile檔案,在尾部添加如下: [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. #zookeeper  
  2. export ZOOKEEPER=/opt/zookeeper-3.4.5  
  3. PATH=$PATH:$ZOOKEEPER/bin  

使其生效

6. 啟動zk [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. cd /opt/zookeeper-3.4.5/bin  
  2. ./zkServer.sh start  

在剩下兩台機器重複以上步驟,注意myid要對應

安裝Storm

1. 解壓tar包并賦予執行權限 2. 将Storm的bin目錄加入系統路徑 修改/etc/profile檔案,在尾部加入如下: [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. PATH=$PATH:/opt/storm-0.9.0.1/bin  

使其生效   3. 建立一個Storm的本地資料目錄 [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. mkdir -p /var/tmp/storm/workdir/  

以上步驟在Storm的叢集上的其他機器上重複執行,然後進行配置: a. 配置nimbus 修改storm的conf/storm.yaml檔案如下: [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. ########### These MUST be filled in for a storm configuration  
  2.  storm.zookeeper.servers:  
  3.      - "10.1.110.21"  
  4.      - "10.1.110.22"  
  5.      - "10.1.110.24"  
  6. #  
  7. # nimbus.host: "nimbus"  
  8. #  
  9. #  
  10. # ##### These may optionally be filled in:  
  11. #  
  12. ## List of custom serializations  
  13. # topology.kryo.register:  
  14. #     - org.mycompany.MyType  
  15. #     - org.mycompany.MyType2: org.mycompany.MyType2Serializer  
  16. #  
  17. ## List of custom kryo decorators  
  18. # topology.kryo.decorators:  
  19. #     - org.mycompany.MyDecorator  
  20. #  
  21. ## Locations of the drpc servers  
  22. # drpc.servers:  
  23. #     - "server1"  
  24. #     - "server2"  
  25.  storm.local.dir: "/var/tmp/storm/workdir"  
  26.  storm.messaging.transport: "backtype.storm.messaging.netty.Context"  
  27.  storm.messaging.netty.server_worker_threads: 1  
  28.  storm.messaging.netty.client_worker_threads: 1  
  29.  storm.messaging.netty.buffer_size: 5242880  
  30.  storm.messaging.netty.max_retries: 100  
  31.  storm.messaging.netty.max_wait_ms: 1000  
  32.  storm.messaging.netty.min_wait_ms: 100  

  注意: Storm的配置檔案格式有點讓人郁悶。 在每個配置項前面必須留有空格,否則會無法識别。

storm.messaging.* 部分是Netty的配置。如果沒有該部分。那麼Storm預設還是使用ZeroMQ。   b. 配置supervisor 修改storm的conf/storm.yaml檔案如下: [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. ########### These MUST be filled in for a storm configuration  
  2.  storm.zookeeper.servers:  
  3.      - "10.1.110.21"  
  4.      - "10.1.110.22"  
  5.      - "10.1.110.24"  
  6.  nimbus.host: "10.1.110.24"  
  7. #   
  8. #   
  9. # ##### These may optionally be filled in:  
  10. #      
  11. ## List of custom serializations  
  12. # topology.kryo.register:  
  13. #     - org.mycompany.MyType  
  14. #     - org.mycompany.MyType2: org.mycompany.MyType2Serializer  
  15. #  
  16. ## List of custom kryo decorators  
  17. # topology.kryo.decorators:  
  18. #     - org.mycompany.MyDecorator  
  19. #  
  20. ## Locations of the drpc servers  
  21. # drpc.servers:  
  22. #     - "server1"  
  23. #     - "server2"  
  24.  supervisor.slots.ports:  
  25.      - 6700  
  26.      - 6701  
  27.      - 6702  
  28.  storm.local.dir: "/var/tmp/storm/workdir"  
  29.  storm.messaging.transport: "backtype.storm.messaging.netty.Context"  
  30.  storm.messaging.netty.server_worker_threads: 1  
  31.  storm.messaging.netty.client_worker_threads: 1  
  32.  storm.messaging.netty.buffer_size: 5242880  
  33.  storm.messaging.netty.max_retries: 100  
  34.  storm.messaging.netty.max_wait_ms: 1000  
  35.  storm.messaging.netty.min_wait_ms: 100  

注意: i.   nimbus.host是nimbus的IP或hostname ii.  supervisor.slots.ports 是配置slot的ip位址。配了幾個位址,就有幾個slot,即幾個worker。如果嘗試送出的topology所聲明的worker數超過目前可用的slot,該topology送出會失敗。 iii. storm.messaging 部分是Netty的配置,就不再重複叙述了。   仍然要注意格式問題。 你可以在這裡找到所有的配置項: https://github.com/nathanmarz/storm/blob/master/conf/defaults.yaml

啟動叢集

1. 啟動nimbus 在nimbus機器的Storm的bin目錄下執行 [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. ./storm nimbus  

  2. (Optional) 在nimbus機器上啟動 Storm UI  (Storm提供的一個簡單的檢視cluster資訊的網頁) [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. ./storm ui  

3. 啟動supervisor 在supervisor機器的Storm的bin目錄下執行 [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. ./storm supervisor  

  4. 檢查 打開Storm UI 頁面。本例是起在10.1.110.24上,是以打開: http://10.1.110.24:8080   預設是啟在8080端口上,如果你想改成其他的,如8089,直接修改nimbus的storm.yaml檔案,添加 [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. ui.port=8089  

部署程式

1. 從 https://github.com/nathanmarz/storm-starter去clone或者下載下傳一個例子包   2. 将包内的m2-pom.xml重命名為pom.xml,并修改twitter4j的版本(人在中國傷不起啊.......) [html]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. <dependency>  
  2.     <groupId>org.twitter4j</groupId>  
  3.     <artifactId>twitter4j-core</artifactId>  
  4.     <!--<version>2.2.6-SNAPSHOT</version>-->  
  5.     <version>[2.2,)</version>  
  6. </dependency>  
  7. <dependency>  
  8.     <groupId>org.twitter4j</groupId>  
  9.     <artifactId>twitter4j-stream</artifactId>  
  10.     <!--<version>2.2.6-SNAPSHOT</version>-->  
  11.     <version>[2.2,)</version>  
  12. </dependency>  

用Maven編譯 [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. mvn clean install -Dmaven.test.skip  

3. 将storm-starter/target目錄下的storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar拷到nimbus伺服器上去   4. 部署topology [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. ./storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.WordCountTopology test  

  5. 檢視結果 兩種方式, a. 檢視StormUI 

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題

  b. storm的bin目錄下運作 [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. ./storm list  

[plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. 769  [main] INFO  backtype.storm.thrift - Connecting to Nimbus at localhost:6627  
  2. Topology_name        Status     Num_tasks  Num_workers  Uptime_secs  
  3. -------------------------------------------------------------------  
  4. test                 ACTIVE     28         3            20          

6. 關閉topology a. StormUI上面點選要關閉的topology,如test,然後在新頁面的Topology actions中選kill b. 運作./storm kill test

常見問題

Storm的log檔案預設存放在其logs目錄下,其中我們一般要關心的是 nimbus下的nimbus.log和ui.log supervisor下的 superviosr.log - supervisor啟動、啟動topology task、關閉等資訊 worker-xxxx.log - 該worker上運作的task的具體log   1. worker-xxxx.log 顯示 2013-09-02 15:31:53 worker [WARN] Received invalid messages for unknown tasks. Dropping...  該問題是host配置問題,解析host出問題 解決辦法: a.  [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. hostname <new-name>  

b.  [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. vi /etc/sysconfig/network  

設定HOSTNAME=<new-name>   c.  [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. vi /etc/hosts  

将ipv4位址解析成<new-name>,并添加其他節點資訊,如: [plain]  view plain copy print ?

Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
Storm應用系列之——叢集部署 準備工作 安裝ZK 安裝Storm 啟動叢集 部署程式 常見問題
  1. 10.1.110.24 nimbus  
  2. 10.1.110.22 supervisor-22  
  3. 10.1.110.21 supervisor-21  

  注意: 如果是ipv6,需要更改Storm的配置檔案支援ipv6.預設是ipv4。   2. StormUI上面nimbus和supervisor都顯示127.0.0.1 解決辦法同1   3. 啟動時,supervisor.log不停重新整理 5fefa024-50b2-4c5c-b8e2-c2360501cb03 still hasn't started 出現幾條是正常的,work 啟動需要時間。但是如果一直重新整理,就有問題。可以到supervisor.log中把它上面緊挨着的java 啟動指令考下來,單獨執行。看看是哪裡有問題。   4. topologykill後,kill supervisor或nimbus,立刻啟動,有時會自動shutdown supervisor和nimbus啟動、關閉後,zookeeper上資訊會有同步。每次啟動,會嘗試恢複、停止上一次的task。對于supervisor,可以等到StormUI上面topology完全停止後,再重新開機,可避免該問題。   5. 如何remote debug? 在storm的conf/storm.yaml裡面加入worker.childopts: "-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"。

注:

這個參數是給啟動的worker用的,一個worker對應一個JVM程序。是以如果有兩個worker在該節點上啟動,必定有一個fail。因為端口沖突!

在shutdown一個topology時,該worker的程序并不會自動關閉,是以端口已然被占着。這個時候再啟動時,有可能會配置設定一個新程序,這時又會去綁該端口,也會fail!

是以應盡量避免remote debug,最後在本地模式調試好後才上傳至cluster。 在每次debug後,要kill掉該supervisor才能避免下次部署失敗。

原文

http://blog.csdn.net/xeseo/article/details/17678829