Storm 是什么
-
Storm 是一个分布式的,可靠的,容错的流式计算框架
-
Storm 可以实时可靠的处理流数据,在实时分析/性能监测等需要高时效性的领域广泛采用
-
Storm把集群的状态存在Zookeeper或者本地磁盘,所以后台进程都是无状态的(不需要保存自己的状态,都在zookeeper上),可以在不影响系统健康运行的同时失败或重启
-
Storm可应用于–数据流处理、持续计算(持续地向客户端发送数据,它们可以实时的更新以及展现数据,比如网站指标)、分布式远程过程调用(轻松地并行化CPU密集型操作)
Storm 和 Hadoop 对比
Storm | Hadoop |
---|---|
实时的流处理框架 | 批量处理 |
基于ZooKeeper的 master/slave 结构;master被称为nimbus,slaves被称为supervisors | master-slave结构,不依赖于ZooKeeper;master节点是任务调度者,slaves节点是任务执行者 |
Storm 集群能够每秒处理成千上万的信息 | hdfs利用MapReduce进行大批量数据的离线计算 |
Storm 一旦运算开始将不会停止,除非杀死进程 | MapReduce按指定顺序完成作业 |
如果nimbus/supeervisors集群中某一节点挂掉,重新启动后任务将会从上次断开处继续执行 | 如果作业调度者死亡,所有作业将消失 |
Storm 中的一些基本概念
组件 | 描述 |
---|---|
Tuple | tuple 是Storm中的主要数据结构(数据的基本单位),是一个有序元素的集合。tuple 支持所有的数据类型 |
Stream | 一组无序的 tuple |
Spout | 数据源头。负责接收外部数据封装为数据源以供集群中的Bolt使用 |
Bolt | 逻辑处理单元,是计算的核心,负责计算从Spout源头传过来的数据,并将结果进行输出 |
Topology | 将Spout和Bolt关联在一起的拓扑结构,使其具备实时处理能力,相当于MapReduce |
Task | 负责执行Spout和Bolt的引擎 |
Executor | 执行线程,执行task任务 |
Worker | 工作进程,管理分配作业线程 |
Stream grouping | Storm的流分组。控制tuple的流向策略(从Spout流向Bolt,或者从Bolt流向其他Bolt,都可以选择不同的分组策略进行控制) |
下图是Storm的处理流程:
Storm 集群中的进程
进程 | 描述 |
---|---|
nimbus | 管理节点进程 |
supervisor | 从属节点进程 |
worker | 工作进程 |
core | ui进程 |
logviewer | 日志进程 |
下图是各进程的关系: