要搭建storm集群首先需要由zookeeper,這里使用三臺(tái)機(jī)器订讼,一臺(tái)做做nimbus(mini1機(jī)器),兩臺(tái)做supervisor(mini2和mini3機(jī)器)鞋仍。
三臺(tái)hosts文件如下
[root@mini1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 localhost.jinbm
192.168.25.127 mini1
192.168.25.129 mini2
192.168.25.130 mini3
這里還是使用root用戶來搭建
按照一般集群部署流程
集群部署的流程:下載安裝包、解壓安裝包、修改配置文件惑淳、分發(fā)安裝包、啟動(dòng)集群饺窿。
1汛聚、下載storm,我這里下載的是apache-storm-0.9.5.tar.gz短荐,傳到mini1機(jī)器上。
2叹哭、解壓storm安裝包到apps文件夾下(如果沒有該文件夾需要?jiǎng)?chuàng)建忍宋,我這里以前將zookeeper,hadoop等都解壓到了這個(gè)文件夾方便統(tǒng)一管理)风罩,解壓后糠排,修改名字為storm(一來為了方便,但主要是為了配置環(huán)境變量方便超升,即使以后換了storm版本只要改名為storm那么環(huán)境變量已然有效)入宦。
[root@mini1 ~]# tar -zxvf apache-storm-0.9.5.tar.gz -C apps/
[root@mini1 ~]# cd apps/
[root@mini1 apps]# ll
總用量 24
drwxr-xr-x. 8 root root 4096 10月 19 15:15 apache-flume-1.6.0-bin
drwxr-xr-x. 9 root root 4096 10月 30 15:24 apache-storm-0.9.5
drwxrwxr-x. 10 hadoop hadoop 4096 9月 30 22:04 hadoop-2.6.4
drwxr-xr-x. 7 root root 4096 10月 30 00:20 hbase
drwxr-xr-x. 8 root root 4096 10月 17 12:38 hive
drwxr-xr-x. 10 root root 4096 10月 29 23:21 zookeeper-3.4.6
[root@mini1 apps]# mv apache-storm-0.9.5/ storm
3、修改環(huán)境變量(三臺(tái)機(jī)器都一樣)
最后添加2兩信息
[root@mini1 storm]# vi /etc/profile
...
export STORM_HOME=/root/apps/storm
export PATH=$PATH:$STORM_HOME/bin
[root@mini1 storm]# source /etc/profile
4室琢、修改配置文件乾闰,進(jìn)入strom目錄的conf目錄下,修改配置文件storm.yaml盈滴。添加內(nèi)容如下:
[root@mini1 conf]# vi storm.yaml
#指定storm使用的zk集群
storm.zookeeper.servers:
- "mini1"
- "mini2"
- "mini3"
#指定storm集群中的nimbus節(jié)點(diǎn)所在的服務(wù)器
nimbus.host: "mini1"
#指定nimbus啟動(dòng)JVM最大可用內(nèi)存大小
nimbus.childopts: "-Xmx1024m"
#指定supervisor啟動(dòng)JVM最大可用內(nèi)存大小
supervisor.childopts: "-Xmx1024m"
#指定supervisor節(jié)點(diǎn)上涯肩,每個(gè)worker啟動(dòng)JVM最大可用內(nèi)存大小
worker.childopts: "-Xmx768m"
#指定ui啟動(dòng)JVM最大可用內(nèi)存大小,ui服務(wù)一般與nimbus同在一個(gè)節(jié)點(diǎn)上。
ui.childopts: "-Xmx768m"
#指定supervisor節(jié)點(diǎn)上病苗,啟動(dòng)worker時(shí)對(duì)應(yīng)的端口號(hào)疗垛,每個(gè)端口對(duì)應(yīng)槽,每個(gè)槽位對(duì)應(yīng)一個(gè)worker硫朦,這里是4個(gè)worker
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
5贷腕、將配置好的storm安裝包分發(fā)到mini2和mini3機(jī)器上/root/apps目錄下
[root@mini1 apps]# scp -r storm/ mini2:/root/apps/
[root@mini1 apps]# scp -r storm/ mini3:/root/apps/
6、啟動(dòng)集群
mini1機(jī)器上進(jìn)入storm的bin目錄下啟動(dòng)nimbus和ui
可以使用nuhub指令啟動(dòng)但是如果沒安裝的話就按照我下面的咬展,無非多開兩個(gè)窗口
啟動(dòng)nimbus
[root@mini1 bin]# ./storm nimbus
換個(gè)窗口啟動(dòng)ui
[root@mini1 bin]# ./storm ui
[root@mini1 ~]# jps
14783 Jps
4550 QuorumPeerMain
14648 nimbus
14714 core
在mini2和mini3上分別啟動(dòng)supervisor
[root@mini2 bin]# ./storm supervisor
[root@mini3 bin]# ./storm supervisor
[root@mini3 ~]# jps
3466 QuorumPeerMain
8912 Jps
8826 supervisor
查看集群是否啟動(dòng)起來
瀏覽器輸入mini1:8080
Cluster Summary中能看到Supervisor的個(gè)數(shù)為2泽裳,對(duì)應(yīng)的物理機(jī)mini2和mini3各啟了一個(gè)≈可蓿空閑的槽有8個(gè)诡壁,總共有8個(gè)槽(即worker數(shù),配置文件中配了4個(gè)端口也就是4個(gè)worker荠割,mini2和mini3個(gè)四個(gè)所以就是8個(gè))
Topology summary沒有內(nèi)容是因?yàn)檫€沒有跑storm程序
后面還有Supervisor summary與Nimbus Configuration的相關(guān)信息妹卿。
現(xiàn)在使用storm命令來跑個(gè)wordcount程序。
在mini3機(jī)器上(隨意)
[root@mini3 storm]# storm jar examples/storm-starter/storm-starter-topologies-0.9.5.jar storm.starter.WordCountTopology wordcount
...
File 'examples/storm-starter/storm-starter-topologies-0.9.5.jar' uploaded to 'storm-local/nimbus/inbox/stormjar-dfed4e29-132b-45d8-9e5a-f5cbb87c4927.jar' (3248678 bytes)
487 [main] INFO backtype.storm.StormSubmitter - Successfully uploaded topology jar to assigned location: storm-local/nimbus/inbox/stormjar-dfed4e29-132b-45d8-9e5a-f5cbb87c4927.jar
488 [main] INFO backtype.storm.StormSubmitter - Submitting topology wordcount in distributed mode with conf {"topology.workers":3,"topology.debug":true}
825 [main] INFO backtype.storm.StormSubmitter - Finished submitting topology: wordcount
再次查看頁面
看到了使用了三個(gè)Worker蔑鹦,共28個(gè)executor(28個(gè)task夺克,默認(rèn)情況下executor=task=thread數(shù))有個(gè)wordcount程序在跑。點(diǎn)擊
Topology summary下的wordcount嚎朽,查看拓?fù)湓斍?/p>
能看到一個(gè)Spout2個(gè)Bolt铺纽,id也列出來了。各自使用的線程數(shù)已經(jīng)發(fā)射數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)哟忍。要看具體的spout和bolt信息狡门,點(diǎn)擊進(jìn)去即可,這里查看下split
線程的id锅很,使用了那臺(tái)機(jī)器的哪個(gè)端口(槽其馏,即worker),發(fā)射數(shù)據(jù)都有爆安。
查看日志
在nimbus上查看ui日志信息(別的自行查看)
[root@mini1 storm]# tail -100f logs/ui.log
2017-10-30T15:36:06.293+0800 o.m.log [INFO] Logging to Logger[org.mortbay.log] via org.mortbay.log.Slf4jLog
2017-10-30T15:36:06.304+0800 o.m.log [INFO] jetty-6.1.26
2017-10-30T15:36:06.339+0800 o.m.log [INFO] Started SocketConnector@0.0.0.0:8080
2017-10-30T15:36:08.779+0800 b.s.thrift [INFO] Connecting to Nimbus at mini1:6627
2017-10-30T15:36:08.779+0800 b.s.thrift [INFO] Connecting to Nimbus at mini1:6627
...
在mini2或者mini3查看worker信息
[root@mini3 logs]# ll
總用量 48812
-rw-r--r--. 1 root root 0 10月 30 15:37 access.log
-rw-r--r--. 1 root root 0 10月 30 15:37 metrics.log
-rw-r--r--. 1 root root 18284 10月 30 16:23 supervisor.log
-rw-r--r--. 1 root root 49961204 10月 30 16:43 worker-6703.log
[root@mini3 logs]# tail -100f worker-6703.log
一些總結(jié)
Worker與topology
一個(gè)worker只屬于一個(gè)topology,每個(gè)worker中運(yùn)行的task只能屬于這個(gè)topology叛复。
反之,一個(gè)topology包含多個(gè)worker扔仓,其實(shí)就是這個(gè)topology運(yùn)行在多個(gè)worker上褐奥。
一個(gè)topology要求的worker數(shù)量如果不被滿足,集群在任務(wù)分配時(shí)翘簇,根據(jù)現(xiàn)有的worker先運(yùn)行topology撬码。
如果當(dāng)前集群中worker數(shù)量為0,那么最新提交的topology將只會(huì)被標(biāo)識(shí)active缘揪,不會(huì)運(yùn)行耍群,
只有當(dāng)集群有了空閑資源之后义桂,才會(huì)被運(yùn)行。