storm啟停腳本的編寫:
第一步:在master節點創建start-supervisor.sh腳本,然后分發到各個服務器,就可以通過運行該腳本開啟supervisor服務
start-supervisor.sh腳本
#!/bin/bash
#使配置的storm環境變量生效
source /home/hadoop/.bashrc
#后臺運行supervisor
nohup storm supervisor >/dev/null? 2>&1 &
第二步:在master節點創建supervisor-hosts文件,用來存放主機名
supervisor-hosts
hadoop02
hadoop03
hadoop04
第三步:在master節點創建start-all.sh啟動所有supervisor
start-all.sh
#!/bin/bash
source /home/hadoop/.bashrc
#重寫bin和supervisor目錄
bin=/home/hadoop/apps/apache-storm-0.9.7/bin
supervisors=/home/hadoop/apps/apache-storm-0.9.7/bin/supervisor-hosts
#啟動主節點
nohup storm nimbus >/dev/null? 2>&1 &
#讀取supervisor-hosts文件中每一個節點執行start-supervisor.sh腳本啟動supervisor服務
#while后面的supervisor用來接收讀取到的每一行數據
cat $supervisors | while read supervisor
do
echo $supervisor
ssh $supervisor $bin/start-supervisor.sh
done
第四步:寫停止腳本
stop-all.sh
#!/bin/bash
source /home/hadoop/.bashrc
#重寫bin和supervisor目錄
bin=/home/hadoop/apps/apache-storm-0.9.7/bin
supervisors=/home/hadoop/apps/apache-storm-0.9.7/bin/supervisor-hosts
#把nimbus相關的進程都殺掉
kill -9 `ps -ef | grep java | grep nimbus | awk '{print $2}'`
#停止所有的supervisor
cat $supervisors | while read supervisor
do
echo $supervisor
ssh $supervisor $bin/stop-supervisor.sh &
done
第五步:在各節點的storm的bin目錄下編寫腳本stop-supervisor.sh
stop-supervisor.sh
#!/bin/bash
source /home/hadoop/.bashrc
#殺死supervisor進程
kill -9 `ps -ef | grep java | grep supervisor | awk '{print $2}'`
第六步:上傳所有腳本到storm/bin目錄下,并將start-supervisor.sh和stop-supervisor.sh分發到所有storm集群節點:Hadoop02,Hadoop04
第七步:為了防止重名:修改腳本名字為 storm-start-all.sh 和 storm-stop-all.sh
第八步:修改所有腳本運行權限:chmod 755 *.sh
在家目錄下運行stop-storm-all.sh腳本
出錯:
錯誤一:-bash: /home/hadoop/apps/apache-storm-0.9.7/bin/start-storm-all.sh: /bin/bash^M: bad interpreter: No such file or directory
[hadoop@hadoop03 bin]$ sh start-storm-all.sh
: No such file or directory /home/hadoop/.bashrc
先注釋掉.bashrc命令行,在外部手動開啟全局環境變量
錯誤二:單獨運行腳本stop-supervisor.sh ?arguments must be process or job IDs0
storm搭建:
官網:storm.apache.org
版本:apache-storm-1.1.1.tar.gz
配置文件storm.yaml的修改?
參考http://storm.apache.org/releases/1.1.1/Setting-up-a-Storm-cluster.html
1)storm.zookeeper.servers: This is a list of the hosts in the Zookeeper cluster for your Storm cluster. It should look something like:
storm.zookeeper.servers:
- "hadoop02"
- "hadoop03"
- "hadoop04"
2)storm.local.dir
storm.local.dir:"/home/hadoop/log/storm"
3)nimbus.seeds:---主節點
nimbus.host: "hadoop03"
4)supervisor.slots.ports:
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
發送安裝包
運行storm集群
在主節點運行Nimbus:【Hadoop03】bin/storm nimbus
后臺:nohup storm nimbus >/dev/null? 2>&1 &
啟動后臺ui管理界面:nohup storm ui >/dev/null? 2>&1 &
在其余節點運行Supervisor:bin/storm supervisor
后臺:nohup storm supervisor >/dev/null? 2>&1 &
在UI界面查看storm: http://{ui host}:8080.
強制殺死:kill -s -9 進程號
搭建集群中遇到的問題:
1、參數supervisor.slots.ports是用來指定一個節點最多可以運行的task的數目,storm中一個節點最多四個task,其中的一個端口號表示一個task任務
2、啟動storm之前可以先配置環境變量,然后在家目錄下就可以執行命令
nohup storm nimbus >/dev/null? 2>&1 &
nohup storm supervisor >/dev/null? 2>&1 &
3、要查看storm的ui界面,首先要在后臺開啟ui管理界面才能訪問
nohup storm ui >/dev/null? 2>&1 &
4、nimbus和supervisor的節點選取:nimbus選取在Hadoop03(hdfs的active NameNode,純屬主觀意愿),supervisor的節點選取在Hadoop02,Hadoop03,Hadoop04
5、nimbus,supervisor是什么?
storm中8大概念:
1)Topologies:拓撲任務:地鐵運送乘客的任務,其中包含多個spout和bolt
2)Streams:地鐵5號線,運送乘客(數據)
3)Spouts:起始站
4)Bolts:中間站
5)Stream groupings
6)Reliability
7)Tasks
8)Workers
storm架構:
默認情況下,一個supervisor節點最多可以啟動4個worker進程,每一個topology默認占用一個worker進程,每個worker進程會啟動1個或者多個executor,每個executor啟動1個task。
最重要的是并行度/高并發以及線程安全的實現。