天天看點

apache storm筆記

storm 開源的、分布式、流式計算系統

概念 Topologies Streams Spouts Bolts Stream groupings Reliability Tasks Workers Configuration

storm和hadoop表面上類似,hadoop運作的是MapReduce job,Storm上是topology,不過MapReduce最終會結束,而topology則不會,除非手動kill掉

1、搭建Zookeeper叢集;

配置jdk

export JAVA_HOME=/usr/local/src/jdk1.8.0_20

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

2解壓zookeeper,配置zoo.cfg tickTime=2000  (機關毫秒) initLimit=10     syncLimit=5 dataDir=/data/zookeeper clientPort=2181 server.1=82master:2888:3888  server.2=83work1:2888:3888 ( initLimit: Follower 在啟動過程中,會從 Leader 同步所有最新資料,然後确定自己能夠對外服務的起始狀态。 Leader 允許 Follower 在 initLimit 時間内完成這個工作。 具體為n*tickTime

syncLimit:在運作過程中,Leader負責與ZK叢集中所有機器進行通信,例如通過一些心跳檢測機制,來檢測機器的存活狀态。如果Leader發出心跳包在syncLimit之後,還沒有從Follower那裡收到響應,那麼就認為這個Follower已經不線上了。具體為n*tickTime

zookeeper完全分布部署後會有一個follower,多個leader,followe與leader通過配置檔案中的第二個端口通信,當follower失效後,會通過第三個端口通信選舉新的follower出來

dataDir:日志存放的位置,使用專用的日志儲存設備能夠大大地提高系統的性能,如果将日志存儲在比較繁忙的儲存設備上,那麼将會在很大程度上影響系統的性能。 

注意在dataDir下面要touch一個myid,裡面寫上server.n的n

關防火牆,selinux

hosts裡面寫上對應的資訊

)

3啟動bin/zkServer.sh start(注意zookeeper是快速失敗的,有異常會立馬退出,要注意啊,最好寫shel監控下)

日志預設是zookeeper.out,可以修改log4j.properties和zkEnv.sh中的zookeeper.root.logger=INFO, CONSOLE  為zookeeper.root.logger=INFO, ROLLINGFILE,重新開機服務即可自生産log4j.properties自定義的日志檔案

在Storm的叢集裡面有兩種節點: 控制節點(master node)和工作節點(worker node)。

控制節點上面運作一個叫Nimbus背景程式,它的作用類似Hadoop裡面的JobTracker。Nimbus負責在叢集裡面分發代碼,配置設定計算任務給機器, 并且監控狀态。

每一個工作節點上面運作一個叫做Supervisor的節點。Supervisor會監聽配置設定給它那台機器的工作,根據需要啟動/關閉工作程序。每一個工作程序執行一個topology的一個子集;一個運作的topology由運作在很多機器上的很多工作程序組成。

Nimbus和Supervisor之間的所有協調工作都是通過Zookeeper叢集完成。 另外, Nimbus程序和Supervisor程序都是快速失敗(fail-fast)和無狀态的 。所有的狀态要麼在zookeeper裡面, 要麼在本地磁盤上。這也就意味着你可以用kill -9來殺死Nimbus和Supervisor程序, 然後再重新開機它們,就好像什麼都沒有發生過。這個設計使得Storm異常的穩定。

安裝Storm依賴庫; (0.9版本後zeromq和jzmq可以不再安裝,直接用storm內建的netty)

yum groupinstall 'Development Tools'

1編譯安裝ZeroMQ

2安裝JZMQ

./autogen.sh

./configure

make

報錯

Noruletomaketarget `classdist_noinst.stamp', needed by `org/zeromq/ZMQ.class touch src/classdist_noinst.stamp

No rule to make target `org/zeromq/ZMQ$Context.class 到 jzmq/src/org/zeromq中手工編譯java代碼  javac *.java

make install

解壓安裝包并修改storm.yaml配置檔案;(注意開頭的和冒号後面都要有空格!!!)

 storm.zookeeper.servers:

     - "82master"      - "83work1"  nimbus.host: "82master"  storm.local.dir: "/storm/workdir"

 supervisor.slots.ports:

 - 6700

 - 6701

 - 6702

 - 6703

(配置netty) 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  --指定最大等待時間(毫秒)

storm.messaging.netty.min_wait_ms: 100   --指定最小等待時間(毫秒)

5、啟動Storm各個背景程序。

master節點運作bin/storm nimbus >/dev/null 2>&1 & work節點運作bin/storm supervisor >/dev/null 2>&1 &

UI要在master上運作bin/storm ui >/dev/null 2>&1 & web通路http://{nimbus host}:8080

work節點啟動logviewer,ui上就可以直接操作了 bin/storm logviewer

storm的啟動交給supervisor,背景啟動的指令實際沒有作用

繼續閱讀