1.Storm是什么?
Storm用来实时处理数据,特点:低延迟、高可用、分布式、可扩展、数据不丢失。提供简单容易理解的接口,便于开发。
2.Storm与Hadoop的区别?
- Storm用于实时计算,Hadoop用于离线计算。
- Storm处理的数据保存在内存中,源源不断;Hadoop处理的数据保存在文件系统中,一批一批。
- Storm的数据通过网络传输进来;Hadoop的数据保存在磁盘中。
- Storm与Hadoop的编程模型相似
3.Storm核心组件
Nimbus:负责分配任务,任务调度,对任务进行监控
Supervisor:当前物理机上的管理者,接受Nimbus分配的任务,启动和停止属于自己管理的worker进程。通过配置文件可以设置当 前supervisor启动多少个worker.
Worker:执行具体任务的组建,任务有两种两类型,一种是Spout任务,一种是Bolt任务。一个worker中可同时存在多个Spout任务和 多个Bolt任务。
Task:worker中每一个Spout或者Bolt的线程称为一个task,在storm0.8之后,task不再与物理线程对应,不同spout/bolt的task可能会共 享一个物理线程,该线程称为executor。默认情况下executor=thread=task
4.Storm编程模型(Mr.Mao的图)
Topology:Storm中运行的一个实时应用程序的名称。
Spout:在一个topology中获取源数据流的组件,通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源 数据。接受外部数据源的组件,将外部数据源转化成Storm内部的数据,以Tuple为基本的传输单元下发给Bolt
Bolt: 接受Spout发送的数据,或上游的bolt的发送的数据。根据业务逻辑进行处理。发送给下一个Bolt或者是存储到某种介 质 上。介质可以是Redis可以是mysql,或者其他。
Tuple:一次消息传递的基本单元,理解为一组消息就是一个Tuple。Storm内部中数据传输的基本单元,里面封装了一个List 对象,用来保存数据。
StreamGrouping:数据分组策略,7种:shuffleGrouping(Random函数),Non Grouping(Random函数),FieldGrouping(Hash取 模)、Local or ShuffleGrouping 本地或随机,优先本地
Worker与topology:一个worker只属于一个topology,每个worker中运行的task只能属于这个topology。 反之,一个topology 包含多个worker,其实就是这个topology运行在多个worker上。
一个topology要求的worker数量如果不被满足,集群在任务分配时,根据现有的worker先运行topology。 如果当前集群中worker数量为0,那么最新提交的topology将只会被标识active,不会运行,只有当集群有 了空闲资源之后,才会被运行。
5.流式计算一般架构图
(下面会一步一步实现这个流程敬请期待。。。)
- 其中flume用来获取数据。
- Kafka用来临时保存数据。
- Strom用来计算数据。
- Redis是个内存数据库,用来保存数据。