什么是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组件

image
image
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集群拥有极强的稳定性