storm是一个流式并行计算框架,该框架的特点流式处理,尽可能快地处理数据,所以一般被应用在需要实时得出结果的场景。对于一个jar包提交上去的任务对应其内部一整个流程,称为topology,而一个topology里的编程模型有两种组件:
- spout 负责接收外部数据,下发到blot组件
- blot 一种是ack的blot,负责处理错误数据,执行重发机制;另一种就是需要我们实现的业务blot,用于接收spout下发的数据,并进行业务处理,处理完毕可以接下一个blot继续处理业务,也可以将数据存储到持久层。
storm框架也有主从节点,主节点成为nimbus,负责唤醒supervisor节点,而从节点称为supervisor,负责提交jar包,并启动设定好的work数量,而一个work就是一个执行任务,负责执行jar包上的程序。
搭建流程
- 首先需要有zookeeper集群,并启动集群才能将supervisor节点联系在一起
- 配置storm文件,启动storm集群
- 编写storm代码,提交jar包到集群上执行
搭建步骤
-
下载storm安装包住,这里我使用的是storm-1.2.2版本:
storm1.2.2 -
解压storm安装包
tail -zxvf apache-storm-1.2.2.tar.gz -C /usr/local
-
修改storm安装路径
mv /usr/local/apache-storm-1.2.2 /usr/local/storm
-
修改storm文件配置
vi storm.yaml
- storm.yaml配置文件信息如下:
#指定storm使用的zk集群 storm.zookeeper.servers: - "hadoop1" - "hadoop2" - "hadoop3" - "hadoop4" #指定storm本地状态保存地址 storm.local.dir: "/usr/local/storm/workdir" #指定storm集群中的nimbus节点所在的服务器 nimbus.host: "hadoop1" #指定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 supervisor.slots.ports: - 6700 - 6701 - 6702 - 6703
配置文件注意要点:
- storm.zookeeper.servers 配置需要集群的storm机器主机名或ip
- storm.local.dir 尽量配置在storm安装目录中,以便分发都其他机器上
- nimbus.host 根据自己需要配置一台机器作为storm的nimbus节点
- supervisor.slots.ports 配置多个supervisor启动worker的端口,用来建立supervisor与worker的通讯
-
创建一个保存storm的主从节点以及blot组件状态信息的工作目录
mkdir -p /usr/local/storm/workdir