目录
一、什么是Storm
1、定义:Storm是一个分布式实时计算系统。Storm能轻松可靠地处理无界的数据流,就像Hadoop对数据进行批处理;
2、什么是离线计算?流式计算?
离线计算:批量获取数据、传输数据、周期性批量计算数据 代表:Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算数据、Hive批量计算数据
流式计算:数据实时产生、传输、计算、展示 代表:Flume实时获取数据、Kafka实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存、持久化存储(mysql)。
3、storm与hadoop对比
| Storm | hadoop |
角色 | Nimbus | JobTracker |
| Supervisor | TaskTracker |
| Worker | Child |
应用名称 | Topology | Job |
编程接口 | Spout/Bolt | Mapper/Reducer |
4、应用场景:
实时分析,在线机器学习,连续计算,分布式RPC,ETL等。Apache Storm速度很快:基准测试表明它每秒可处理每个节点超过一百万个元组。
5、实时流常见架构
二、名词术语理解
1、元组(Tuple)
是消息传递的基本单元,Storm使用元组作为其数据模型,元组支持所有的基本类型、字符串和字节数组作为字段值,只要实现类型的序列化接口就可以使用该类型的对象。元组本来应该是一个key-value的Map,但是由于各个组件间传递的元组的字段名称已经事先定义好,所以只要按序把元组填入各个value即可,所以元组是一个value的List。
2、流(stream)
流是Storm的核心抽象,是一个无界的元组系列。源源不断传递的元组就组成了流,在分布式环境中并行地进行创建和处理。
3、水龙头(Spout)
Spout是拓扑的流的来源,是产生源数据流的组件。Spout会从外部数据源中读取数据,然后转换为拓扑内部的源数据。如果Storm处理元组失败,可靠的Spout能够重新发射,而不可靠的Spout就尽快忘记发出的元组。是否调用Ack()和fail()方法。
4、转接头(Bolt)
拓扑中处理都在Bolt中完成,Bolt是流的处理节点,从一个拓扑接收数据,然后执行处理的组件。Bolt可以过滤、业务处理、连接运算、连接与访问数据库等任何操作,类似于map和reduce的结合。简单的流处理一个bolt可以处理,复杂的流需要多个bolt连接处理。
5、拓扑(topology)
拓扑(Topology)是Storm中运行的一个实时应用程序,因为各个组件间的消息流动而形成逻辑上的拓扑结构。Storm的拓扑类似于MapReduce的作业(Job)。
6、Nimbus
主控节点,整个集群的控管核心,负责在集群对节点分配任务,并监视主机故障,topology的提交等工作,类似于Hadoop的JobTracker。
7、Supervisor
工作节点,负责接收Nimbus分配的任务,管理所有Worker,一个Supervisor节点中包含多个Worker进程。类似TaskTracker
8、流分组(Stream grouping)
流分组,是拓扑定义中的一部分,为每个Bolt指定应该接收哪个流作为输入。
9、工作进程(Worker)
Worker是Spout/Bolt中运行具体处理逻辑的进程。一个worker就是一个进程,进程里面包含一个或多个线程
三、配置storm集群
1、修改storm/conf
# 设置Zookeeper的主机名称
storm.zookeeper.servers:
- "hdp-1"
- "hdp-2"
- "hdp-3"
# 设置主节点的主机名称
nimbus.seeds: ["hdp-1"]
# 设置Storm的数据存储路径
storm.local.dir: "/root/apps/storm/data"
# 设置Worker的端口号
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
2、启动nimbus、supervisor
#已配置环境变量
[root@hdp-1 conf]# storm nimbus &
[root@hdp-1 conf]# storm supervisor &
3、启动ui界面 http://hdp-1:8080/index.html 查看状态
[root@hdp-1 conf]# storm ui &
4、查看日志
(1)在nimbus的服务器上 storm/logs/nimbus.log,ui.log,supervisor.log 文件查看
在supervisor的服务器上 storm/logs/worker-6702.log
(2)启动ui的supervisor日志
[root@hdp-1 conf]# storm logviewer &
ui界面点击Supervisor Summary的hdp-1