Jstorm叢集搭建過程/Jstorm叢集一鍵安裝部署

小金子發表於2016-05-31

Jstorm 官方搭建使用過程如連線https://github.com/alibaba/jstorm/wiki/%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%85 ,我整理了三個指令碼:安裝
Jstorm 叢集
安裝 jstorm_web_ui 監控頁面啟動zookeeper、Jstorm叢集進行測試

一、整體環境說明

三個指令碼是測試環境搭建使用的,三臺機器:192.168.9.92192.168.9.93192.168.9.94
如果在其他機器上面使用,必須修改指令碼中相應有ip的地方 ,指令碼在文章最後提供,在 zip 資料夾裡面有完整的一份,使用的時候直接使用zip資料夾即可。

二、搭建過程

將 zip 包解壓到測試環境 /home/work 目錄下,解壓後,執行目錄中的三個指令碼,順序執行,即可安裝完畢。

2.1 搭建指令碼如下

2.1.1 Jstorm 叢集安裝過程 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/bin/bash

# author: xirong 
# date  :  2015-02-06 

####
# 此指令碼為在測試環境192.168.9.92~94 三臺機器上面搭建 jstorm 叢集的指令碼,免去一步步的安裝的過程,如果換其他環境,把文中的ip修改即可
# 詳細步驟請參考 https://github.com/alibaba/jstorm/wiki/%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%85
#	
# 安裝目錄
# jstorm : /opt/jstorm-0.9.6.2, zookeeper : /opt/zookeeper-3.4.6 , java : /opt/jdk1.7.0_75 
#
# 注意:執行此shell指令碼時候,最好使用 source jstorm_install.sh 或者 . jstorm_install.sh 強制在當前shell程式中執行,否則當前shell指令碼獲取不到>修改的這些環境變數值 
# 		遇到sudo的命令時需要輸入密碼
# 指令碼執行前提:
#		存在使用者work,即存在/home/work/目錄 ;
#       全新機器無Java
#		機器已經存在 Python 2.6,一般centos自帶
# 
# 執行完指令碼後需要手動操作的步驟:
# 1. zookeeper 叢集需要每臺機器標記自己身份,vim $dataDir/myid 將機器的標識填入,比如第一天機器即為1,二臺為2,以此類推      
#### 

# 在64系統裡執行32位程式如果出現/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

# 解決錯誤Failed to set locale, defaulting to C 
echo "export LC_ALL=en_US.UTF-8"  >>  /etc/profile  
source /etc/profile 


yum install glibc.i686
echo `finish pre install glibc.i686`

echo `start unzip all files`
#tar -zxf jstorm.tar.gz 
unzip jstorm.zip
echo `finish unzip all files and start java setup`
cd jstorm_tar/
tar -zxf jdk-7u75-linux-i586.tar_0.gz -C /opt/
echo `finish unzpip jdk-7u75-linux-i586.tar_0.gz && start java envirenment settting `

# 配置java環境
echo `## java configuration ` >> /etc/profile
echo `JAVA_HOME=/opt/jdk1.7.0_75` >> /etc/profile
echo `export PATH=$JAVA_HOME/bin:$PATH` >> /etc/profile
echo `export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar` >> /etc/profile
echo `export JAVA_HOME` >> /etc/profile

echo `finish java envirement setting etc/profile`
# 使配置生效
. /etc/profile
which java

## 搭建zookeeper叢集 
echo `start setup zookeeper ……………………`
tar -zxf zookeeper-3.4.6.tar.gz -C /opt/ 
echo `# zookeeper configuration ` >> /etc/profile
echo `export ZOOKEEPER_HOME=/opt/zookeeper-3.4.6` >> /etc/profile
echo `export PATH=$ZOOKEEPER_HOME/bin:$PATH` >> /etc/profile
echo `export CLASSPATH=$ZOOKEEPER_HOME/lib` >> /etc/profile

mkdir -p /home/work/jstorm/zookeeper_data 
#cd /opt/zookeeper-3.4.6/conf/
cp -f /opt/zookeeper-3.4.6/conf/zoo_sample.cfg /opt/zookeeper-3.4.6/conf/zoo_sample.cfg.bak
mv /opt/zookeeper-3.4.6/conf/zoo_sample.cfg /opt/zookeeper-3.4.6/conf/zoo.cfg
# 修改zookeeper資料檔案的位置
sed -i.bak `s/dataDir=/tmp/zookeeper/dataDir=/home/work/jstorm/zookeeper_data//g` /opt/zookeeper-3.4.6/conf/zoo.cfg
# 叢集配置的時候需要加入三臺機器的配置 ,這個就是你在搭建你自己的三臺機器的ip
echo `# zookeeper cluster mathines` >> /opt/zookeeper-3.4.6/conf/zoo.cfg
echo `server.1=192.168.9.92:2888:3888` >> /opt/zookeeper-3.4.6/conf/zoo.cfg 
echo `server.2=192.168.9.93:2888:3888` >> /opt/zookeeper-3.4.6/conf/zoo.cfg 
echo `server.3=192.168.9.94:2888:3888` >> /opt/zookeeper-3.4.6/conf/zoo.cfg 

# dataDir目錄下新增標識身份 myid(這個需要手動做)
# vim $dataDir/myid 將機器的標識填入,比如第一天機器即為1,二臺為2

# 使配置生效
. /etc/profile
echo `finish setup zookeeper && start setup zeromq……`

# 安裝zeromq 
# 解決錯誤 cannot link with -luuid, install uuid-dev
yum install uuid-devel && yum install libuuid-devel

tar -zxf zeromq-2.1.7.tar.gz 
cd zeromq-2.1.7
./configure && make && sudo make install && sudo ldconfig 
cd .. 

echo `finish setup zeromq && start setup jzmq ……`

# 安裝jzmq 
tar -zxf jzmq.tar && cd jzmq  && ./autogen.sh && ./configure && make && sudo make install
cd ..

# 安裝 jstrom 
echo `finish setup jzmq && start setup jstorm ……`
mkdir /home/work/jstorm/jstorm_data 
unzip jstorm-0.9.6.2.zip -d /opt/

echo `export JSTORM_HOME=/opt/jstorm-0.9.6.2` >> ~/.bashrc 
echo `export PATH=$PATH:$JSTORM_HOME/bin` >> ~/.bashrc

echo `after configure bashrc for jstorm`
source ~/.bashrc

# 配置$JSTORM_HOME/conf/storm.yaml
echo `start configuration storm.yaml ……`
sed -i `/localhost"$/`d /opt/jstorm-0.9.6.2/conf/storm.yaml
sed -i /`storm.zookeeper.servers:/a     - "192.168.9.94"` /opt/jstorm-0.9.6.2/conf/storm.yaml
sed -i /`storm.zookeeper.servers:/a     - "192.168.9.93"` /opt/jstorm-0.9.6.2/conf/storm.yaml
sed -i /`storm.zookeeper.servers:/a     - "192.168.9.92"` /opt/jstorm-0.9.6.2/conf/storm.yaml
sed -i `s/%JSTORM_HOME%/data//home/work/jstorm/jstorm_data/g` /opt/jstorm-0.9.6.2/conf/storm.yaml
sed -i /`storm.zookeeper.root/a nimbus.host: "192.168.9.92"` /opt/jstorm-0.9.6.2/conf/storm.yaml

# 下面這兩句只需要在安裝 jstorm_ui 和提交jar節點的機器上面執行就可以了
#mkdir ~/.jstorm
#cp -f $JSTORM_HOME/conf/storm.yaml ~/.jstorm

echo `congratilations ! you have successfully install jstorm on your machine ! Enjoy it !`

2.1.2 Jstorm_web_ui 監控搭建 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash

# author: xirong 
# date  :  2015-05-11 

#########
# 安裝 jstorm 監控 UI 頁面 (只需要在一臺機器上面安裝即可)
# 此指令碼執行前需要先執行指令碼 1.jstorm_cluster_install.sh
#########

echo `start install apache-tomcat-7.0.61 `
mkdir ~/.jstorm
cp -f $JSTORM_HOME/conf/storm.yaml ~/.jstorm

tar -zxf apache-tomcat-7.0.61.tar.gz  -C /opt/
cd /opt/apache-tomcat-7.0.61/webapps
cp $JSTORM_HOME/jstorm-ui-0.9.6.2.war  ./
mv ROOT ROOT.old
ln -s jstorm-ui-0.9.6.2 ROOT 
cd ../bin
./startup.sh

echo `congratulaions ! you have install jstorm_ui! enjoy it !`

# 如果本機埠8080沒有開放,那麼需要開放埠號8080以供外面可以訪問
#/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
#/etc/rc.d/init.d/iptables save
#/etc/init.d/iptables restart

2.1.3 jstorm 叢集啟動 測試

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash

# author: xirong 
# date  :  2015-05-11 

#####
# 啟動 jstorm指令碼 
# 1. 先啟動必須元件 zookeeper,啟動前必須確定每臺機器自己的myid檔案
####

# 先啟動必須元件 zookeeper,啟動前必須確定每臺機器自己的myid檔案,不明白,檢視安裝地方 
cd /opt/zookeeper-3.4.6
sh bin/zkServer.sh start 

echo `zookeeper has started ! please see status :`

# leader or follower 
sh bin/zkServer.sh status

# 詳細命令 http://www.wangyuxiong.com/archives/51725

# 啟動 jstorm 服務 自動指令碼 $JSTORM_HOME/logs/supervisor.log檢查有無錯誤
sh /opt/jstorm-0.9.6.2/bin/start.sh

# 只需要在nimbus機器上面執行,如果已經ok的話,就不需要了
# nohup jstorm nimbus &
# $JSTORM_HOME/logs/nimbus.log檢查有無錯誤


# 停止 
#sh /opt/jstorm-0.9.6.2/bin/stop.sh

監控頁面如下(當然這只是官方例子,證明安裝部署的ok):
Jstorm 叢集首頁

topology 分析頁面

2.2 安裝注意

  • java環境配置建議1.7以上
  • 叢集三臺機器需要關閉防火牆,否則錯誤 “java.net.NoRouteToHostException: 沒有到主機的路由
1
2
3
4
[root@master shirdrn]# service iptables stop  
Flushing firewall rules: [  OK  ]  
Setting chains to policy ACCEPT: filter [  OK  ]  
Unloading iptables modules: [  OK  ]

三、jstorm 常用命令

  1. 啟動 nimbus “nohup jstorm nimbus & “ 檢視$JSTORM_HOME/logs/nimbus.log 檢查錯誤日誌
  2. 啟動 supervisor “nohup jstorm supervisor &” 檢視$JSTORM_HOME/logs/supervisor.log 檢查有無錯誤
  3. 停止 “sh $JSTORM_HOME/bin/stop.sh”

完整命令列表同storm一樣,包括jar、kill、activate、deactivate、rebalance、repl、classpath、localconfvalue、remoteconfvalue、nimbus、supervisor、ui、drpc等,詳細見:https://github.com/techdocscn/storm/blob/master/source/documentation/Command-line-client.md

四、zookeeper 常用命令

zk 叢集搭建過程:

常用命令:

  1. 啟動ZK服務: sh bin/zkServer.sh start
  2. 檢視ZK服務狀態: sh bin/zkServer.sh status
  3. 停止ZK服務: sh bin/zkServer.sh stop
  4. 重啟ZK服務: sh bin/zkServer.sh restart
    或者連線到伺服器 bin/zkCli.sh -server 127.0.0.1:2181 輸入help 檢視操作幫助

其它使用命令詳細參考: http://www.wangyuxiong.com/archives/51725

學習資料:

Jstorm中使用zookeeper主要用於Storm叢集各節點的分散式協調工作,具體功能如下:
(1)儲存客戶端提供的topology任務資訊,nimbus負責將任務分配資訊寫入Zookeeper,supervisor從Zookeeper上讀取任務分配資訊;
(2)儲存supervisor和worker的心跳(包括它們的狀態),使得nimbus可以監控整個叢集的狀態, 從而重啟一些掛掉的worker;
(3)儲存整個叢集的所有狀態資訊和配置資訊。
具體目錄結構參考:storm在ZooKeeper中的目錄結構

五、jstorm.zip 包和指令碼下載

在 zip 資料夾裡面有完整的上述三個驕傲本,使用的時候直接下載zip資料夾即可,下載地址 : 百度網盤 ,密碼:btcq

六、storm 學習資料

大圓那些事 http://www.cnblogs.com/panfeng412/tag/Storm/
徐明明 https://xumingming.sinaapp.com/category/storm/
常用的一些基本命令 http://my.oschina.net/infiniteSpace/blog/339193
jstorm通用介紹 http://luoshi0801.iteye.com/blog/2168848
簡單之美個人部落格 http://shiyanjun.cn/archives/1019.html

jstorm深入分析:http://hexiaoqiao.sinaapp.com/2014/06/jstorm%E4%BB%8B%E7%BB%8D/
介紹nimbus :http://hexiaoqiao.sinaapp.com/2014/06/jstorm%E4%B9%8Bnimbus%E7%AE%80%E4%BB%8B/
介紹 superviser :http://hexiaoqiao.sinaapp.com/2014/07/jstorm%E4%B9%8Bsupervisor%E7%AE%80%E4%BB%8B/
storm 入門教程(量子恆道官方部落格) http://blog.linezing.com/?cat=92

如果有什麼問題,可以在右側我的各種社交中找到我,或者在文章下面評論,我會及時答覆各位


相關文章