Storm-0.10.0 集羣安裝和配置
最近要做畢業設計,需要用到storm流式計算架構,工慾善其事必先利其器,第一步當然是配置環境,借鑑師姐的總結加上自己在實戰中的理解,總結出此步驟,如果有錯誤和遺漏請通過 [email protected] 交流指正,謝謝!
1. 所需的安裝包和版本
安裝在home的storm下,路徑均爲 /home/qj/storm/
2. 創建Ubuntu14.04 LTS虛擬機
虛擬機OS:ubuntu-14.04.2-desktop-amd64
(下載地址:http://www.ubuntu.com/download/desktop)
磁盤:100G
內存:2G
CPU:2個
選擇的是第二種安裝方式,自動安裝vmwaretools,比較簡單
如果需要自動分區應該選擇第三個
(1) 激活root賬戶
Ubuntu14.04安裝完成後,系統默認的Root賬號是關閉的。這主要是爲了保護系統的安全性,但有些時候爲了安裝軟件或進行其它操作時需要獲得root權限,就得使用root賬號
命令:
sudopasswd root
若要切換到root: sudo root
若要退出到一般用戶:su用戶名
(2) 安裝搜狗中文輸入法
sudoapt-get install aptitude
sudoaptitude install fcitx
安裝後右上角system settings --> Language Support --> 輸入密碼後安裝組件 --> 最下面選擇fcitx --> 註銷
右上角出現鍵盤標誌
進入瀏覽器,下載搜狗Linux版,雙擊.deb文件,輸入密碼安裝,註銷,點擊鍵盤標誌,出現搜狗即爲成功
3. 集羣節點
配置七臺主機:1臺nimbus主節點、3臺supervisor工作節點、3臺zookeeper集羣節點。注意,ip地址應該按照自己的需求修改,在原來的網段,只要沒有被佔用,就可以設置,查詢命令:nm-tool
主機名(節點) |
IP地址 |
內存(GB) |
VCPU (個) |
硬盤(GB) |
節點運行進程 |
Nimbus |
192.168.200.21 |
2 |
2 |
100 |
Nimbus、DRPC |
Supervisor1 |
192.168.200.22 |
2 |
2 |
100 |
Supervisor、Worker |
Supervisor2 |
192.168.200.23 |
2 |
2 |
100 |
Supervisor、Worker |
Supervisor3 |
192.168.200.24 |
2 |
2 |
100 |
Supervisor、Worker |
Zookeeper1 |
192.168.200.25 |
2 |
2 |
100 |
Leader/Follower |
Zookeeper2 |
192.168.200.26 |
2 |
2 |
100 |
Follower/ Leader |
Zookeeper3 |
192.168.200.27 |
2 |
2 |
100 |
Follower/ Leader(zookeeper集羣中只有一個Leader) |
克隆七臺主機,修改每臺主機的主機名、hosts文件,爲每臺主機配置靜態IP地址、設置SSH免祕鑰登錄,
(1) 修改主機名字
七臺分別爲:nimbus、supervisor1~supervisor3、zookeeper1~zookeeper3。
hostname //查看主機名
sudo vi /etc/hostname
linux vi操作:x 刪除原來的主機名, 點insert 輸入新主機名, esc 之後,:wq
保存之後退出
修改完之後需要註銷,否則hosts文件無法打開
(2) 配置hosts
sudo gedit /etc/hosts
127.0.0.1 localhost
#127.0.1.1 nimbus
192.168.200.21 nimbus
192.168.200.22 supervisor1
192.168.200.23 supervisor2
192.168.200.24 supervisor3
192.168.200.25 zookeeper1
192.168.200.26 zookeeper2
192.168.200.27 zookeeper3
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhostip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
注意不要忘了第二行的#,註釋掉一個地址
(3) 配置網絡
點edit connections
配置之後有可能不能馬上上網,可以嘗試重啓,或者重連,等待片刻
(4) ssh無密碼登陸
Storm集羣內節點間發送命令時需要通過ssh進行發送,用戶不希望每發送一次命令就輸入一次密碼,因此需要實現節點間的SSH免祕鑰登錄。
$ sudo apt-get install ssh
ssh-keygen –t rsa // 一路回車就闊以了
第一次時:
scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/authorized_keys
後面:
scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/nim_key //nim_key是新建的文件,之後追加到authorized_keys
cat ~/.ssh/nim_key >> ~/.ssh/authorized_keys
A若想無密碼訪問B,就需要把公鑰發送給B,B把A發來的公鑰添加到自己的授權文件裏。
有時會出現ssh登錄不上的問題,這裏有幾種解決方案可供參考:
① 查看集羣節點的IP地址是否有衝突
本人在實驗室服務器上爲自己的Storm集羣虛擬機配置靜態IP地址時,沒有詢問其他人IP地址的佔用情況,結果導致個人集羣某節點的IP地址與其他機器衝突。修改後正常登陸ssh
② 關閉Ubuntu14.04的防火牆
root@XXX:~# sudo ufw disable
防火牆在系統啓動時自動禁用
③ Ubuntu系統上安裝、啓動sshd服務
sudo apt-get install openssh-server
sudo /etc/init.d/ssh restart
④ ssh還不能登錄上,就修改sshd的默認配置,即ssh出現permission denied (publickey)問題:
修改/etc/ssh/sshd-config文件,將其中的PermitRootLogin no修改爲yes,PubkeyAuthenticationyes修改爲no,AuthorizedKeysFile .ssh/authorized_keys前面加上#屏蔽掉,PasswordAuthenticationno修改爲yes就可以了。
(5) 安裝JDK
下載jdk1.7.0壓縮包到虛擬機的/home/storm文件夾下,jdk下載官網:http://www.oracle.com/technetwork/java/javase/downloads/index.html;這裏下載jdk-1.7.0_80(http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html#jdk-7u80-oth-JPR)
找到壓縮包所在目錄
tar –zxvf jdk-7u80-linux-x64.tar.gz
sudo gedit /etc/profile //編輯profile文件
if [ -d /etc/profile.d ]; then
for i in/etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
# Java Environment Path
export JAVA_HOME=/home/qj/storm/jdk1.7.0_80
export PATH=$PATH:$JAVA_HOME/bin
unset i
fi
然後,使/etc/profile 文件生效,在終端輸入:
source/etc/profile
最後,在終端使用java –version命令測試Java是否可以正常運行,如輸出JDK的版本信息,則安裝成功。
4. 搭建zookeeper集羣
Zookeeper是針對分佈式應用的高性能協調服務,是高效可靠的協同工作系統,提供的功能包括配置維護、名字服務、分佈式同步、組服務等。在IP地址爲192.168.1.75~77的3臺主機上搭建zookeeper-3.4.6集羣,zookeeper官網:http://zookeeper.apache.org/。
首先,先部署zookeeper集羣的第一個節點,部署完成後將zookeeper文件和config配置文件拷貝到其他zookeeper集羣節點即可(保持一致)。
(1) 單節點下載及安裝zookeeper
在終端進入storm用戶,輸入Linux命令:
cd/home/storm //進入/home/storm文件夾
wgethttp://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz //在線下載zookeeper
tar–zxvf zookeeper-3.4.6.tar.gz //解壓文件到當前目錄
(2)配置zoo.cfg文件
到zookeeper目錄下 sudo gedit conf/zoo.cfg
內容如下:
tickTime=2000
dataDir=/home/qj/storm/zookeeper-3.4.6/data
dateLogDir=/home/qj/storm/zookeeper-3.4.6/logs
clientPort=2181
initLimit=5
syncLimit=2
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888
其中,dataDir指定Zookeeper的數據文件目錄;其中server.id=host:port:port,id是爲每個Zookeeper節點的編號,保存在dataDir目錄下的myid文件中,zoo1~zoo3表示各個Zookeeper節點的hostname,第一個port是用於連接leader的端口,第二個port是用於leader選舉的端口。
(3)新建data和logs文件夾
mkdir /home/qj/storm/zookeeper-3.4.6/data
mkdir /home/qj/storm/zookeeper-3.4.6/logs
(4)修改profile文件,添加系統環境變量
sudo gedit /etc/profile
# Java Environment Path
export JAVA_HOME=/home/qj/storm/jdk1.7.0_80
export ZK_HOME=/home/qj/storm/zookeeper-3.4.6
export PATH=$PATH:$JAVA_HOME/bin:$ZK_HOME/bin
source/etc/profile //使profile文件生效
完成以上3步之後,將zookeeper文件和/etc/config配置文件scp到其他zookeeper集羣節點(保持一致)。
集羣模式下,需要在datadir配置項的目錄下創建一個myid文件,myid文件的編碼格式爲ANSI。myid文件中寫入的內容是一個數字,該數字和server.x中的x數字相對應,Zookeeper啓動時會讀取myid文件。
touch /home/qj/storm/zookeeper-3.4.6/data/myid
echo 1 > /home/qj/storm/zookeeper-3.4.6/data/myid
測試是否安裝成功:
在目錄下:bin/zkServer.sh start (三個都需要啓動)
查看狀態bin/zkServer.sh status
關閉zookeeper服務
bin/zkServer.sh stop
5. 安裝Storm依賴庫
(1) 安裝Zeromq-2.1.7
//下載安裝包
wgethttp://download.zeromq.org/zeromq-2.1.7.tar.gz
// 解壓縮包
tar –zxvf zeromq-2.1.7.tar.gz
//進入壓縮包目錄
cd zeromq-2.1.7
然後進行編譯、安裝,命令如下:
./configure //用來檢測安裝平臺的目標特徵
碰到問題:
Q1:configure: error: Unable to find a workingC++ compiler
solution:安裝C++/C編譯器,命令:
sudo apt-get install g++;
sudo apt-get install gcc;
Q2:configure: error: cannot link with-luuid, install uuid-dev.
solution:sudo apt-get install uuid-dev會出現上圖問題,
要先:sudo apt-get update 如果還不行,就重啓!!
sudomake //用來編譯,它從Makefile中讀取指令,然後編譯。
sudomake install //用來安裝,它從Makefile中讀取指令,安裝到指定目錄
(2) 安裝JZMQ
//安裝git
sudoapt-get install git
//下載jzmq包
gitclone https://github.com/nathanmarz/jzmq.git
//進入jzmq安裝包
cdjzmq
然後進行編譯、安裝,命令如下:
命令:./autogen.sh
./configure
注意:
② 爲了保證jzmq正常工作,一般需要先完成java的安裝及配置;
② 在運行腳本./autogen.sh時,碰到問題:
Q1:autogen.sh:error: could not find libtool. libtool is required to run autogen.sh.
solution: sudo apt-get install libtool
Q2:autogen.sh:error: could not find autoreconf. autoconf and automake are required to runautogen.sh.
solution:sudoapt-get install autoreconf*
命令:sudo make
③ 在編譯的過程中,可能會出現以下問題:
Q1:storm@nimbus:~/jzmq$make
Makingall in src
make[1]:Entering directory `/home/storm/jzmq/src'
make[1]:*** No rule to make target `classdist_noinst.stamp', needed by`org/zeromq/ZMQ.class'. Stop.
make[1]:Leaving directory `/home/storm/jzmq/src'
make:*** [all-recursive] Error 1
solution:
需要touch “classdist_noinst.stamp”,命令如下:
touchsrc/classdist_noinst.stamp
Q2:$make
...
make[1]:*** No rule to make target `org/zeromq/ZMQException.class, needed by`all'. Stop.
make:*** [all-recursive] Error 1
solution:
編譯class,命令如下:
$ cd src/org/zeromq/
$javac *.java
$cd ..
$sudomake
... success!
命令:sudo make install
(3) 安裝Python-2.7.10
//下載python-2.17.10
wgethttps://www.python.org/downloads/release/python-2710/Python-2.7.10.tgz
//編譯安裝Python-2.7.10
$ tar –zxvf Python-2.7.10.tgz
$ cd Python-2.7.10
$ ./configure
$ make
$ sudo make install
//測試
$ python -V
(4) 安裝unzip
執行命令安裝unzip:
$sudo apt-get install unzip
6. 安裝Storm發行版
需要在Nimbus和Supervisor節點上安裝Storm發行版
(1) 下載Storm-0.10.0
$ wgethttp://mirror.bit.edu.cn/apache/storm/apache-storm-0.10.0/apache-storm-0.10.0.tar.gz
(2) 解壓到安裝目錄/home/storm
$tar –zxvf apache-storm-0.10.0.tar.gz
$mv apache-storm-0.10.0 storm-0.10.0 //修改文件名 mv [原文件名] [修改後文件名]
7. 配置storm.yaml文件
Storm發行版本解壓目錄下有一個conf/storm.yaml文件,用於配置Storm。conf/storm.yaml中的配置選項將覆蓋defaults.yaml中的默認配置。以下配置選項是必須在conf/storm.yaml中進行配置的:
gedit/home/qj/storm/storm-0.10.0/conf/storm.yaml
########### These MUST be filled infor a storm configuration
storm.zookeeper.servers:
- "192.168.200.25"
- "192.168.200.26"
- "192.168.200.27"
nimbus.host:"192.168.200.21"
storm.local.dir:"/home/qj/storm/storm-0.10.0/workdir"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
# ##### These may optionally befilled in:
#
## List of custom serializations
# topology.kryo.register:
# - org.mycompany.MyType
# - org.mycompany.MyType2:org.mycompany.MyType2Serializer
#
## List of custom kryo decorators
# topology.kryo.decorators:
# - org.mycompany.MyDecorator
#
## Locations of the drpc servers
drpc.servers:
- "192.168.200.21"
8. 啓動Storm各個守護進程
(1) 先開啓zookeeper服務
(2) 然後分別在nimbus節點和supervisor節點開啓後臺守護進程
① nimbus節點啓動:nimbus、drpc、ui
② supervisor節點啓動:supervisor
然後,打開瀏覽器,輸入默認的Storm UI 網址(nimbus:8080)。若可以看到Storm UI界面(如下),storm集羣安裝成功。
至此,Storm-0.10.0集羣的安裝與部署工作完成!如果開七臺虛擬機太卡的話,可以將zookeeper配置在supervisor上,注意zoo.cfg、storm.yaml的正確配置即可!
常見的問題和解決:
(1) 在查看zookeeper狀態時bin/zkServer.sh status
如果出現報錯Error contacting service. It is probably not run,那麼可能是zoo.cfg配置出錯,請認真檢查
(2) 啓動nimbus 時報錯
可能是storm.yaml配置,注意認真檢查
(3) 開啓UI報錯
重新啓動nimbus服務
(4) 虛擬機強制關閉,出現cannot find a valid peer process toconnect to
可以刪掉 虛擬機目錄下面的 ".vmss" 文件,然後重啓。