要搭建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
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,查看拓扑详情
能看到一个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,不会运行,
只有当集群有了空闲资源之后,才会被运行。