要搭建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用户来搭建
按照一般集群部署流程
集群部署的流程:下载安装包、解压安装包、修改配置文件、分发安装包、启动集群。
1、下载storm,我这里下载的是apache-storm-0.9.5.tar.gz,传到mini1机器上。
2、解压storm安装包到apps文件夹下(如果没有该文件夹需要创建,我这里以前将zookeeper,hadoop等都解压到了这个文件夹方便统一管理),解压后,修改名字为storm(一来为了方便,但主要是为了配置环境变量方便,即使以后换了storm版本只要改名为storm那么环境变量已然有效)。
[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、修改环境变量(三台机器都一样)
最后添加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节点所在的服务器
nimbus.host: "mini1"
#指定nimbus启动JVM最大可用内存大小
nimbus.childopts: "-Xmx1024m"
#指定supervisor启动JVM最大可用内存大小
supervisor.childopts: "-Xmx1024m"
#指定supervisor节点上,每个worker启动JVM最大可用内存大小
worker.childopts: "-Xmx768m"
#指定ui启动JVM最大可用内存大小,ui服务一般与nimbus同在一个节点上。
ui.childopts: "-Xmx768m"
#指定supervisor节点上,启动worker时对应的端口号,每个端口对应槽,每个槽位对应一个worker,这里是4个worker
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
5、将配置好的storm安装包分发到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
image.png
Cluster Summary中能看到Supervisor的个数为2,对应的物理机mini2和mini3各启了一个。空闲的槽有8个,总共有8个槽(即worker数,配置文件中配了4个端口也就是4个worker,mini2和mini3个四个所以就是8个)
Topology summary没有内容是因为还没有跑storm程序
后面还有Supervisor summary与Nimbus Configuration的相关信息。
现在使用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
再次查看页面
image.png
看到了使用了三个Worker,共28个executor(28个task,默认情况下executor=task=thread数)有个wordcount程序在跑。点击
Topology summary下的wordcount,查看拓扑详情
image.png
能看到一个Spout2个Bolt,id也列出来了。各自使用的线程数已经发射数据转换数据。要看具体的spout和bolt信息,点击进去即可,这里查看下split
image.png
线程的id,使用了那台机器的哪个端口(槽,即worker),发射数据都有。
查看日志
在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数量如果不被满足,集群在任务分配时,根据现有的worker先运行topology。
如果当前集群中worker数量为0,那么最新提交的topology将只会被标识active,不会运行,
只有当集群有了空闲资源之后,才会被运行。
网友评论