#Hadoop# #Storm# #大数据分析# #大数据#
1 Storm概述
Storm最初由Nathan Marz和BackType的团队创建。BackType是一家社交分析公司。后来,Storm被收购,并通过Twitter开源。在短时间内,Apache Storm成为分布式实时处理系统的标准,允许您处理大量的数据,类似于Hadoop。Apache Storm是用Java和Clojure写的,是实时分析的领导者。
1.1 功能、作用
扩展性强,当计算能力不足时,可以进行横向扩展机器
保证数据不丢失,且数据可以消费一次或多次
容错性好,消息处理过程出现异常,会进行重试
语言无关性:storm程序可以使用各种语言进行编写
1.2 应用场景
推荐系统:实时推荐,根据下单或加入购物车等操作
网站统计:实时销量,流量统计
监控预警系统,金融系统
1.3 架构
基于ZK的分布式数据流处理系统。
适用于实时性高,吞吐量低的实时分析系统。
使用Nimbus(协议,主控点)管理集群,各计算节点使用supervisor管理worker。
数据流Stream从Spout(消息生产者)生产元组序列,发送给Bolt(消息处理者)进行处理(可以继续发送给其它Bolt)。
![33115a84f69472f8fd2bebe77e555a20.png](https://i-blog.csdnimg.cn/blog_migrate/1519c2ac459335279485222a858a6cae.jpeg)
Nimbus:负责资源分配和任务调度。
Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。
Worker:运行具体处理组件逻辑的进程。
![5956535cf2776fcedbcea89ea953ca21.png](https://i-blog.csdnimg.cn/blog_migrate/c739ce137abc41d11d89f6091a37fc13.jpeg)
Topology:storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。
Spout:在一个topology中产生源数据流的组件。通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源数据。Spout是一个主动的角色,其接口中有个nextTuple()函数,storm框架会不停地调用此函数,用户只要在其中生成源数据即可。
Bolt:在一个topology中接受数据然后执行处理的组件。Bolt可以执行过滤、函数操作、合并、写数据库等任何操作。Bolt是一个被动的角色,其接口中有个execute(Tuple input)函数,在接受到消息后会调用此函数,用户可以在其中执行自己想要的操作。
Tuple:一次消息传递的基本单元。本来应该是一个key-value的map,但是由于各个组件间传递的tuple的字段名称已经事先定义好,所以tuple中只要按序填入各个value就行了,所以就是一个value list.
Stream:源源不断传递的tuple就组成了stream。
![d2330d108c6f10aa9add058ceec61a7c.png](https://i-blog.csdnimg.cn/blog_migrate/3d396f8b30d60ed831e5253b47c56edd.jpeg)
![b1a56f53efbe1029d85ebacf2a8e4ce6.png](https://i-blog.csdnimg.cn/blog_migrate/e36ec5c25c61a9d0bdcb396b71f92d46.jpeg)
2 环境设置
注意:需要ZooKeeper支持。
1) Apache Zookeeper是运行Storm集群的必备工具。先启动它。由于Zookeeper“快速失败”,最好始终重启它。
$ docker run -d --restart always --name some-zookeeper zookeeper
2) Nimbus守护进程必须与Zookeeper连接。它也是一个“快速失败”的系统。
$ docker run -d --restart always --name some-nimbus --link some-zookeeper:zookeeper storm storm nimbus
3) 最后启动一个Supervisor节点。它将与Nimbus和Zookeeper交谈。
$ docker run -d --restart always --name supervisor --link some-zookeeper:zookeeper --link some-nimbus:nimbus storm storm supervisor
4) 向群集提交拓扑。
$ docker run --link some-nimbus:nimbus -it --rm -v $(pwd)/topology.jar:/topology.jar storm storm jar /topology.jar org.apache.storm.starter.WordCountTopology topology
5) 启动Storm Web UI:默认监听8080端口
$ docker run -d -p 8080:8080 --restart always --name ui --link some-nimbus:nimbus storm storm ui
2.2 下载安装
官网下载:
修改配置文件:conf/storm.yaml(只能使用空格缩进)
storm.zookeeper.servers:
- "localhost"
- "host2"
storm.local.dir: “/path/to/storm/data(any path)”
nimbus.host: "localhost"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
2.3 启动验证
启动主节点:nimbus
![b2afb7a2a6454ff1ed1dc5e73de68f55.png](https://i-blog.csdnimg.cn/blog_migrate/5cd3e56c3d4021eaf8145527e56ada14.jpeg)
启动从节点:supervisor
启动web端:ui
![53db64d5a8e2b6827330bf4be3daccd1.png](https://i-blog.csdnimg.cn/blog_migrate/16e54f50c577d30f9384cf2a52346b9f.jpeg)
3 应用
编写Storm程序的jar包
在maven中增加storm的依赖。
在Storm服务器上提交jar应用
bin/storm jar 类名
![99b47d0a07d62a0b1f66615d849fb21b.png](https://i-blog.csdnimg.cn/blog_migrate/1ce98cf89a6fae02944515d94197ff3b.jpeg)