Storm学习01:Storm简介
什么是Storm
Apache Storm是Apache与基金会的开源的分布式实时计算系统。与Hadoop的批处理相类似,Storm可以对大量的数据流进行可靠的实时处理,这一过程也称为“流式处理”,是分布式大数据处理的一个重要方向。Storm支持多种类型的应用,包括:实时分析、在线机器学习、连续计算、分布式 RPC( DRPC)、ETL等。Strom的一个重要特点就是“快速”的数据处理,有benchmark示显示Storm级能够达到单个节点每秒百万级tuple处理(tuple是Storm的最小数据单元)的速度。快速的数据是处理、优秀的可扩展性与容错性、便捷的可操作性与维护性、活跃的社区技术支持,这就是 Storm 。
Hadoop与Storm的比较
相似之处
Hadoop | Storm | |
---|---|---|
系统角色 | JobTracker | Nimbus |
TaskTracker | Supervisor | |
Child | Worker | |
应用名称 | Job | Topology |
组件接口 | Mapper/Reducer | Spout/Bolt |
- Nimbus:Nimbus在Storm中用于资源分配和作业调度,类比Hadoop中的Job Tracker
- Supervisor:Supervisor在Storm中用于接收Nimbus分配的任务,并且启动和停止用于完成这些任务对的Worker进程。Supervisor类比Hadoop中的TaskTracker
- Worker:运行Storm中具体组件逻辑的进程。这里的组件指的是Spout或者Bolt,对比Hadoop.x的Child进程。
- Topology:Topology是Storm中运行的一个任务,类比Hadoop.x中的一个作业(Job)
- Spout:在一个Topology中产生源数据流的组件
- Bolt:在一个Topology中接收数据,并进行逻辑处理的组件,称为Transformation
不同之处
Hadoop | Storm | |
---|---|---|
数据来源 | Hadoop处理的是HDFS上TB级别的数据(历史数据) | Storm处理的是实时新增的某一笔数据(实时数据) |
处理过程 | Hadoop是分Map阶段和Reduce阶段 | Storm是由用户定义处理流程,流程中可以包含多个步骤,每个步骤可以是数据源(Spout)或处理逻辑(Bolt) |
是否结束 | Hadoop最后是要结束的 | Storm没有结束状态,到最后一步时,就停在那,直到有新数据进入时再从头开始 |
处理速度 | Hadoop是以处理HDFS上大量数据为目的的,处理速度慢 | Storm是只要处理新增的某一笔数据即可,可以做到很快 |
适用场景 | Hadoop是在要处理批量数据时用的,不讲究时效性 | Storm是要处理某一新增数据时使用的,讲究时效性 |
ps:在Hadoop集群上运行MapReduce jobs,在Storm集群上运行topologies。jobs和topologies有很大的不同。一个关键区别是:一个Map Reduce jobs最终可以完成,而topologies处理过程将永远执行(除非Kill it)
Storm组件
Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node)
- 主控节点上运行着Nimbus,负责在Storm集群内分发代码,分配任务给工作机器,并且负责监控集群运行状态
- 工作节点上运行着Supervisor,负责监听从Nimbus分配给它执行的任务,据此启动或停止任务的工作进程。
- 每一个工作进程执行一个Topology的子集;一个运行中的Topology由分布在不同工作节点上的多个工作进程组成。
- Nimbus 和和 Supervisor节点之间所有的协调工作是通过Zookeeper集群来实现的。此外,Nimbus 和Supervisor进程都是快速失败(fail-fast) 和 无状态(stateless) 的;Storm集群所有的状态要么在Zookeeper集群中,要么存储在本地磁盘上。这意味着我们可以用kill-9来杀死Nimbus和Supervisor进程,它们在重启后可以继续工作。这个设计使得Storm集群拥有极强的稳定性。