上一篇随笔中我介绍了Storm中的几个重要概念:Topology,tuple,Spout和Bolt。这几个核心概念是与Storm运算相关的,由于上节课关于单词计数的实例实在单机环境下通过核心包(storm-core-0.10.2.jar)模拟集群环境的,所以实际上并没有涉及到Storm集群的相关知识。在实际生产环境中,对于Storm的应用不可能向上面那样模拟,而是实实在在的在集群环境中应用Storm,所以这篇随笔我就简单介绍一下与Storm集群相关的两个概念(nimbus and supervisor)和Storm集群的搭建。
Nimbus and Supervisor
Storm集群是一个典型的主从结构(master/salve),在主从结构中,通常有一个静态配置的节点或者动态运行中被选举出来的节点充当主节点,称为nimbus。nimbus节点的主要作用是管理、协调和监控在集群上运行的Topology。包括Topology的发布,任务的指派和事件处理失败时重新指派任务。而负责任务运算的工作节点称为Supervisor。在Nimbus和Supervisor之间还存在着一个Apache Zookeepre实例,Storm主要使用zookeeper来协调集群的状态信息,比如任务的分配情况,worker的状态,supervisor之间的nimbus的拓扑度量。supervisor和nimbus之间的通信主要是结合zookeeper的状态变更通知和监控通知来处理的。
Storm集群搭建
-
基本环境:
-
操作系统:
CentOS Linux release 7.3.1611 (Core)
* jdk:
openjdk version "1.8.0_102"
* python: python 2.7
为了模拟集群环境,本实例通过在VirtualBox虚拟机中安装三台CentOS服务器,然后在每一台服务器上安装和配置集群需要的zookeeper环境和Storm安装包。zookeeper集群搭建大家可以在网上搜索相关资料,也可以参考本人随笔zookeeper安装的三种模式。当zookeeper集群搭建好后就可以搭建Storm集群啦。
首先通过主机下载Storm集群安装包:
1
2 1http://www.apache.org/dyn/closer.lua/storm/apache-storm-0.10.2/apache-storm-0.10.2.tar.gz
2
然后将安装包通过FileZilla工具分别传送给三台服务器,并通过ssh命令分别连接三台服务器并解压apache-storm-0.10.2.tar.gz到相关安装目录下:
1
2 1tar -zxvf apache-storm-0.10.2.tar.gz
2
然后进入解压目录下的conf目录下修改配置文件storm.yaml文件内容:
首先配置zookeeper集群地址,该配置内容为必须配置项:
1
2
3
4
5 1storm.zookeeper.servers:
2 - "192.168.0.108"
3 - "192.168.0.109"
4 - "192.168.0.110"
5
由于本例实验三台服务器的IP地址分别为“192.168.0.108”、"192.168.0.109"、"192.168.0.110",所以在搭建zookeeper集群时,在三台服务器上均部署了zookeeper。由于本例zookeeper集群配置的时候均使用了默认端口"2181",所以可以不用配置storm.zookeeper.port选项,如果zookeeper集群搭建的时候没有使用默认端口,则需要配置该项内容。
1
2
3 1//按照具体环境进行配置
2storm.zookeeper.port:2181
3
然后配置nimbus服务器地址:
1
2 1 nimbus.host: "192.168.0.108"
2
各个supervisor服务器需要知道nimbus地址,以便下载Topologies以及其他信息。
由于nimbus和supervisor在运行过程中会存储一些短暂的状态信息,如jars,conf等目录信息,需要配置一个路径用于存储这些相关信息,在配置该项前首先要在存储路径下建立相应的文件夹,然后将该文件夹路径设置为存储路径。这个目录下的内容必须在Storm集群运行过程中一直存在,所以要避免使用/tmp目录,因为重启后/tmp目录下的内容会丢失。
1
2 1mkdir /home/test/developEnvironment/apache-storm-0.10.2/storm
2
1
2 1storm.local.dir: "/home/test/developEnvironment/apache-storm-0.10.2/storm"
2
然后配置supervisor对应的work端口。对于每个supervisor工作节点,需要配置可以在其上面运行的worker数量,而这个worker数量是通过配置各个worker的端口体现出来的。worker通过自己的端口与外界进行通信,获取计算需要的信息以及将计算结构传出去。一般情况下,每个supervisor默认可以配置四个worker,其端口分别是:6700,6701,6702和6703。本例配置如下:
1
2
3
4
5
6 1supervisor.slots.ports:
2 - 6700
3 - 6701
4 - 6702
5 - 6703
6
最后配置一个非必要的参数,当Storm集群启动起来后,可以在nimbus所在的主机上通过网页查看Storm集群状态信息:
1
2 1ui.port:8081
2
如上所示,已经将一个Storm集群最基本的几个配置参数已经配置完成,完成后的配置文件如下所示:
storm.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 1########### These MUST be filled in for a storm configuration
2 storm.zookeeper.servers:
3 - "192.168.0.108"
4 - "192.168.0.109"
5 - "192.168.0.110"
6
7 ui.port: 8081
8 nimbus.host: "192.168.0.108"
9 storm.local.dir: "/home/test/developEnvironment/apache-storm-0.10.2/storm"
10 supervisor.slots.ports:
11 - 6700
12 - 6701
13 - 6702
14 - 6703
15
同样,在其他两台服务器中配置相同的配置内容。到目前为止,所有配置已经完成,下面就来启动服务。
启动zookeeper服务。分别进入三台服务器的zookeeper安装目录下的bin目录,执行如下代码:
1
2
3 1//根据实际配置文件路径及名称填写相关参数
2./zkServer.sh start ../conf/zoo.cfg
3
当zookeeper服务启动成功后,接下来启动Storm的nimbus服务。根据配置文件,进入nimbus.host对应的那台主机,进入Storm安装目录的bin目录下执行如下命令:
1
2 1./storm nimbus &
2
终端出现如下信息说明启动成功:
然后分别进入其他两台服务器,启动supervisor服务:
1
2 1./storm supervisor &
2
当终端打印如下信息时,说明supervisor启动成功:
为了验证Storm服务是否正确启动,我们可以通过网页进行查看Storm状态,在访问网页之前,需要在nimbus服务器上启动相关服务:
1
2 1./storm ui &
2
然后在主机浏览器上通过访问如下网址进行页面查看:
1
2 1http://192.168.0.108:8081/index.html
2
网页显示如下信息:
当可以看见该界面时,说明你已经大功告成啦。
到此,我们最基本的Storm集群环境搭建就圆满完成啦。