一. 说明
Storm是一个分布式实时计算系统,Storm对于实时计算的意义就相当于Hadoop对于批量计算的意义。对于实时性较高的系统Storm是不错的选择。Hadoop提供了map, reduce原语,使批处理程序变得非常地简单和优美。同样,storm也为实时计算提供了一些简单优美的原语。
涉及的术语说明:
Nimbus:Storm集群的主控节点,负责在Storm集群内分发代码,分配任务给工作机器,并且负责监控集群运行状态。其进程名为nimbus。
Supervisor:Supervisor负责监听从Nimbus分配给它执行的任务,据此启动或停止执行任务的工作进程。其进程名为supervisor。
core:Storm的UI服务进程。
安装部署前的准备工作:
1. 配置各主机IP,将各主机IP配置为静态IP(保证各主机可以正常通信,为避免过多的网络传输,建议在同一网段)。
2. 修改各主机名,Storm集群中的所有主机都需要修改。
3. 配置各主机映射,修改hosts文件,加入各主机IP和主机名的映射。
4. 开放相应端口,后面文档中配置的端口都需要开放(或者关闭防火墙)。
5. Python2.7及以上版本。
6. 保证Zookeeper集群服务正常运行。如果在CentOS上安装过Hadoop或者Zookeeper的话,1-5项基本没问题。关于Zookeeper参考:http://www.cnblogs.com/wxisme/p/5178211.html。
7. 这里使用的JDK、Storm版本分别为1.8和0.9.5。
二. 安装配置Storm集群
1. 到Storm官网下载对应的安装包并上传到集群节点。
2. 解压安装包
tar -xvzf apache-storm-0.9.5.tar.gz
3. 修改storm.yaml配置文件
vim conf/storm.yaml
Storm集群使用的Zookeeper集群地址,根据实际情况进行修改。
storm.zookeeper.servers: - "node1" - "node2" - "node3"
Zookeeper的端口不是默认端口时需要配置参数:
storm.zookeeper.port: "修改的端口"
Nimbus和Supervisor进程用于存储少量状态,如jars、confs等的本地磁盘目录,需要提前创建该目录(根据实际情况创建)并给以足够的访问权限。
storm.local.dir: "/usr/storm/data"
Storm集群Nimbus机器地址,各个Supervisor工作节点需要知道哪个机器是Nimbus,以便下载Topologies的jars、confs等文件。根据实际情况进行修改。
nimbus.host: "node3"
对于每个Supervisor工作节点,需要配置该工作节点可以运行的worker数量。每个worker占用一个单独的端口用于接收消息,该配置选项即用于定义哪些端口是可被worker使用的。默认情况下,每个节点上可运行4个workers,分别在6700、6701、6702和6703端口。根据实际情况进行修改。
supervisor.slots.ports: - 6700 - 6701 - 6702
DRPC提供了集群中处理功能的访问接口,storm集群drpc地址,根据实际情况进行修改。关于DRCP参考:http://www.dataguru.cn/article-5572-1.html
drpc.servers: - "node3"
默认情况下,Storm启动worker进程时,JVM的最大内存是768M。由于在使用过程中,Bolt中加载大量数据,768M内存无法满足要求,会导致内存溢出。根据实际情况进行修改。
worker.childopts: "-Xmx1024m"
注意:上面的各项配置之间最好不要留有空行或者其他的空白字符。
三. 启动Storm集群
1. 在主控节点启动Nimbus服务
bin/storm nimbus >> /dev/null &
查看nimbus服务是否启动:
jps
2.在各个节点启动Supervisor服务
bin/storm supervisor >> /dev/null &
3.启动drpc服务
bin/storm drpc >> /dev/null &
4.在主控节点启动Storm UI服务
bin/storm ui >> /dev/null &
查看UI服务是否启动:
jps
访问Storm UI
http://nimbus:8080/
四. 向Storm集群提交服务
执行以下命令,启动Storm Topology:
bin/storm jar test.jar com.test.MyTopology arg1 arg2
其中,test.jar是包含Topology实现代码的jar包,com.test.MyTopology的main方法是Topology的入口,arg1和arg2为com.test.MyTopology执行时需要传入的参数。
停止Storm Topology:
bin/storm kill {toponame}
其中,{toponame}为Topology提交到Storm集群时指定的Topology任务名称。
简单的Storm集群就部署好了,可以开始愉快的Storm之旅了!