Storm 安裝

未經本人同意不得用於獲取積分等。

轉載請註明,http://blog.csdn.net/tryhl/article/details/41946053謝謝!!!!

歡迎加入 java學習分享羣:316297243,一起學習

1.下載 Storm 0.9.1:

wget  http://mirrors.hust.edu.cn/apache/storm/apache-storm-0.9.1-incubating/apache-storm-0.9.1-incubating.tar.gz

1.1 安裝0.9.1

配置0.9.1需要加入一下配置(相比0.8.1)0.9.1不需要安裝jzmq和zeroMQ

storm.messaging.transport: "backtype.storm.messaging.netty.Context" --指定傳輸協議
storm.messaging.netty.server_worker_threads: 1   --指定netty服務器工作線程數量
storm.messaging.netty.client_worker_threads: 1   --指定netty客戶端工作線程數量
storm.messaging.netty.buffer_size: 5242880    --指定netty緩存大小
storm.messaging.netty.max_retries: 100   --指定最大重試次數
storm.messaging.netty.max_wait_ms: 1000  --指定最大等待時間(毫秒)

相比0.8.1,0.9的改進:

消息通知機制變更:消息通知機制支持netty。這是這個版本最大的變化了,因爲netty是java開發的,免除了zeroMQ編譯,安裝的繁瑣過程。對比storm0.8.1安裝過程可以看到減少了zeroMQ和他的支持庫jzmq佔據了大量的 篇幅。當然這個版本還可以支持zeroMQ,但是不建議再使用了

另外UI界面可以查看日誌以及各個節點的配置方便的多。

 1.2 安裝0.8.1

  (1)下面安裝的是0.8.1然後解壓如果是zip,利用 unzip storm-0.8.1.zip解壓

   wget http://gitub.com/downloads/nathanmarz/storm-0.8.1.zip

   當然在安裝Storm之前需要安裝Zookeeper以及ZeroMQ、JZMQ,Python等。安裝Zookeeper請參照ZooKeeper安裝教程。

  (2)下載安裝ZeroMQ 2.1.7

   注意:請勿使用ZeroMQ 2.1.10版本,因爲該版本的一些嚴重BUG會導致Storm集羣運行時出現奇怪的問題,少數用戶在ZeroMQ 2.1.7版本會遇到“Illegal ArgumentException”的異常,此時將ZeroMQ降爲2.1.4版本可修復這一問題。

  下載ZeroMQ 2.1.7

  wget http://download.zeromq.org/zeromq-2.1.7.tar.gz
  解壓   tar -xzvf zeromq-2.1.7.tar.gz
  然後運行 ./cofigure
  sudo make 編譯
  sudo make install安裝

    注意事項:

    如果安裝過程中報錯uuid找不到,則通過如下方法安裝uuid庫

    sudo yum install e2fsprogal -b current

     sudo yum install e2fsprogs-devel -b current

    如果沒有安裝make編譯

     sudo yum install gcc-c++

     如果沒有install  uuid-dev

    sudo install uuid-devel

(3)安裝 JZMQ

  下載後編譯安裝JZMQ

    

  git  clone https://github.com/nathanmarz/jzmq.git
   運行 ./autogen.sh
     ./configure
  編譯  sudo  make
  安裝 sudo make install

   注意事項

   Could’t not find libtool

    運行 yum install libtool

(4)一般都是默認安裝了python,如果沒有則下載安裝

      首先運行 python --version 查看是否安裝了python

     如果沒有安裝,下載python 

     

 wget  http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tar.bz2
  tar -jzvf Python-2.6.6.tar.bz2
  ./configure
  sudo make
  sudo make install

  (5) 安裝uuzip

   yum install uuzip

 

 1.3 Storm的集羣配置

 storm.zookeeper.servers:
     - "master"
     - "slave1"
     - "slave2"
 
 nimbus.host: "master"
 storm.local.dir: "/root/intalldir/storm-0.8.1/workdir"
 supervisor.slots.ports:
      - 6700
      - 6701
      - 6702
      - 6703

   A. storm.zookeeper.servers:Storm集羣使用的ZooKeeper集羣地址

       storm.zookeeper.servers:

          - "master"

          - "slave1"

          - "slave2"

      如果ZooKeeper集羣使用的不是默認端口,那麼還需要storm.zookeeper.port選項

   B.  storm.local.dir :NimbusSupervisor進程用於存儲少量狀態,如jars,conf等本地磁盤目錄,需要提前創建該目錄,並給予讀寫權限。然後在storm.yaml中配置該目錄

       storm.local.dir: "/root/intalldir/storm-0.8.1/workdir"

   C.java.library.path: Storm使用的本地庫(ZMQJZMQ)加載路徑,默認爲“/usr/local/lib:/opt/local/lib:/usr/lib,一般來說ZEROMQJZMQ默認安裝在/usr/local/lib下,因此不需要配置。

   D.nimbus.host: Storm集羣Nimbus機器地址,哥哥Supervisor工作節點需要知道哪個機器是Nimbus,以便系在Topologiesjarsconfs:

     storm.local.dir: "/root/intalldir/storm-0.8.1/workdir"

  E.supervisor.slots.ports:對於每個Supervisor工作節點,需要配置該工作節點可以運行的Worker數量。每個Worker佔用一個單獨的端口用於接收消息,該配置選項用於定義哪些端口是可被Worker使用的。默認情況下,每個節點上可運行4Workers,分別在6700/6701/6702/b703端口

supervisor.slots.ports:

      - 6700

      - 6701

      - 6702

      - 6703

 

1,4.啓動後臺進程

(1)啓動Nimbus:storm主控節點進行bin/storm nimbus   >dev/null   2>&1  &”,啓動Nimbus後臺程序,並放到後臺運行

 

(2)啓動Supervisor:Storm的各個節點上運行bin/storm/supervisor >/dev/null 2>&1 &”,啓動Supervisor後臺程序,並放到後臺執行。

(3)啓動UI:storm主控節點上運行storm ui >dev/null 2>&1 &”啓動UI後臺程序,並放到後臺執行。通過http://{nimbus host}:8080觀察集羣的Worker資源使用情況、Topologies的運行狀態等信息。

 

注意事項:

A.啓動Storm後臺進程時,需要對/conf/storm.yaml配置文件中設置的storm.local.dir目錄具有寫權限。

B.Storm後臺進程被啓動後,將在Storm安裝部署目錄下的logs/子目錄下生成各個進程的日誌文件

C.經測試,Storm UI必須和Storm Nimbus都部署在同一臺機器上,否則UI無法正常工作。因爲進程會檢查本機是否存在Nimbus鏈接。

 

啓動結果:

啓動Nimbus,運行 tail logs/nimbus.log查看日誌

 

運行jps查看運行的進程

  

啓動 運行jps查看運行的進程

 


啓動UI查看進程

 

並查看連接

 

  1.5提交測試任務並停止

  (1)提交任務

        Storm jar storm.jar org.me.MyTopology arg1 arg2 arg3

        其中 storm.jar是包含Topology實現代碼的jar包,org.me.MyTopology的main方法是Topology的入口,arg1/arg2/arg3爲org.me.MyTopology執行時需要傳入的參數

 (2)停止Storm Topology

       Storm kill [topologyname]

 

 測試:

 git clone https://gitub.com/nathanmarz/storm-starter.git下載項目

  Storm運行有兩種模式一種是本地模式,另外一種是集羣模式,本地模式適用於調試和開發,我們查看storm-starter中WordCountTopology.java的源代碼:

 

現在我們就可以啓動了,運行中可能會出現

Cannot run program "python" 的錯誤

這是由於我們在第一個SplitSentence中使用了python腳本,解決方法有兩個:

第一導入 storm resources下面的腳本

第二修改SplitSentence源代碼不使用腳本

  

        @Override
	public void execute(Tuple input) {
		String sentence = input.getString(0);
		String[] words = sentence.split(" ");
		for (String word : words) {
			word = word.trim();
			if (!word.isEmpty()) {
				word = word.toLowerCase();
				List a = new ArrayList();
				a.add(word);
				collector.emit(new Values(word));
			}
		}
		collector.ack(input);
		}
<span style="white-space:pre">	</span>@Override
	public void declareOutputFields(OutputFieldsDeclarer declarer)    {
		declarer.declare(new Fields("words"));
       }

 

另外主方法中也要改一下

 

 對應SplitSentence的輸出字段

 

  本地啓動:

      

 

 

打包提交集羣:

storm jar /root/intalldir/jardir/storm.jar   com.lh.storm.start1.WordCountTopology   storm-test

 

運行 storm list查詢運行的任務

 

最後運行 storm kill storm-test停止運行

 

 

 

 

 

 

 

 

    

                                       

 

 

 

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