要搭建storm集群首先需要由zookeeper鼠次,這里使用三臺機器撵溃,一臺做做nimbus(mini1機器)息罗,兩臺做supervisor(mini2和mini3機器)掂咒。
三臺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ā)安裝包、啟動集群挨摸。
1孩革、下載storm,我這里下載的是apache-storm-0.9.5.tar.gz得运,傳到mini1機器上膝蜈。
2、解壓storm安裝包到apps文件夾下(如果沒有該文件夾需要創(chuàng)建熔掺,我這里以前將zookeeper饱搏,hadoop等都解壓到了這個文件夾方便統(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)境變量(三臺機器都一樣)
最后添加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、修改配置文件报慕,進入strom目錄的conf目錄下深浮,修改配置文件storm.yaml。添加內容如下:
[root@mini1 conf]# vi storm.yaml
#指定storm使用的zk集群
storm.zookeeper.servers:
- "mini1"
- "mini2"
- "mini3"
#指定storm集群中的nimbus節(jié)點所在的服務器
nimbus.host: "mini1"
#指定nimbus啟動JVM最大可用內存大小
nimbus.childopts: "-Xmx1024m"
#指定supervisor啟動JVM最大可用內存大小
supervisor.childopts: "-Xmx1024m"
#指定supervisor節(jié)點上眠冈,每個worker啟動JVM最大可用內存大小
worker.childopts: "-Xmx768m"
#指定ui啟動JVM最大可用內存大小飞苇,ui服務一般與nimbus同在一個節(jié)點上。
ui.childopts: "-Xmx768m"
#指定supervisor節(jié)點上蜗顽,啟動worker時對應的端口號布卡,每個端口對應槽,每個槽位對應一個worker雇盖,這里是4個worker
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
5忿等、將配置好的storm安裝包分發(fā)到mini2和mini3機器上/root/apps目錄下
[root@mini1 apps]# scp -r storm/ mini2:/root/apps/
[root@mini1 apps]# scp -r storm/ mini3:/root/apps/
6、啟動集群
mini1機器上進入storm的bin目錄下啟動nimbus和ui
可以使用nuhub指令啟動但是如果沒安裝的話就按照我下面的崔挖,無非多開兩個窗口
啟動nimbus
[root@mini1 bin]# ./storm nimbus
換個窗口啟動ui
[root@mini1 bin]# ./storm ui
[root@mini1 ~]# jps
14783 Jps
4550 QuorumPeerMain
14648 nimbus
14714 core
在mini2和mini3上分別啟動supervisor
[root@mini2 bin]# ./storm supervisor
[root@mini3 bin]# ./storm supervisor
[root@mini3 ~]# jps
3466 QuorumPeerMain
8912 Jps
8826 supervisor
查看集群是否啟動起來
瀏覽器輸入mini1:8080
Cluster Summary中能看到Supervisor的個數(shù)為2贸街,對應的物理機mini2和mini3各啟了一個庵寞。空閑的槽有8個薛匪,總共有8個槽(即worker數(shù)捐川,配置文件中配了4個端口也就是4個worker,mini2和mini3個四個所以就是8個)
Topology summary沒有內容是因為還沒有跑storm程序
后面還有Supervisor summary與Nimbus Configuration的相關信息逸尖。
現(xiàn)在使用storm命令來跑個wordcount程序古沥。
在mini3機器上(隨意)
[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
再次查看頁面
看到了使用了三個Worker,共28個executor(28個task娇跟,默認情況下executor=task=thread數(shù))有個wordcount程序在跑岩齿。點擊
Topology summary下的wordcount,查看拓撲詳情
能看到一個Spout2個Bolt苞俘,id也列出來了盹沈。各自使用的線程數(shù)已經發(fā)射數(shù)據(jù)轉換數(shù)據(jù)。要看具體的spout和bolt信息苗胀,點擊進去即可襟诸,這里查看下split
線程的id瓦堵,使用了那臺機器的哪個端口(槽基协,即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
一些總結
Worker與topology
一個worker只屬于一個topology,每個worker中運行的task只能屬于這個topology澜驮。
反之,一個topology包含多個worker惋鸥,其實就是這個topology運行在多個worker上杂穷。
一個topology要求的worker數(shù)量如果不被滿足,集群在任務分配時卦绣,根據(jù)現(xiàn)有的worker先運行topology耐量。
如果當前集群中worker數(shù)量為0,那么最新提交的topology將只會被標識active滤港,不會運行廊蜒,
只有當集群有了空閑資源之后,才會被運行溅漾。