1. 简介

    Strom是一个开源的分布式流式计算系统,用来处理流式的数据,被称作为流式的hadoop,在电信行业,可以用来做大流量预警、终端营销、访问竞争对手产品从而做挽留等业务。本文将从storm在hadoop生态圈中所处位置、storm中术语、storm平台搭建、storm应用程序构建等详细介绍storm。

  2. Strom在大数据生态圈中的位置


wKioL1YlmqbSDM7KAAM79f84AX4716.jpg

  1. 上图可以看出,Storm处于HDFS之上,但是并不是说Storm只能是处理HDFS中数据,反而Storm的数据来源一般是Log日志或者是Kafka中数据,当数据通过Strom处理完成之后,其流向可以是HDFS、HBase、关系型数据库等。

  2. Strom是一个计算系统,在大数据处理中,我们耳熟能详的计算系统是mapreduce,这张架构图看出storm和mapreduce是同级关系,而storm被称作是流式的hadoop。所以接下来将通过与mapreduce进行对比来介绍storm

3.Strom常用术语介绍

StromMapReduce(基于hadoop2.X)描述
NimbusApplicationMasterMapReduce中Resourcemanager负责任务分配、资源申请,同样的在Strom中Nimbus负责代码的分发,任务的分配和调度工作
SupervisorNodeManagerMapReducer中NodeManager负责资源的申请,工作进程启动和监控,Strom中Supervisor同样负责任务进程的启动和停止
Worker
YarnChild真正负责任务处理的进程
TopologyMapReduce驱动程序






4.wKiom1Ylp9OyXmSyAAE0M4qtHUE217.jpg
  • Strom架构Topology:通过Storm构建的应用程序描述了数据的来源、数据的处理逻辑和数据的流向。

  • Spout:Topology中的组件,通过Spout描述了数据的来源,Spout中有一个nextTuple()函数,该函数会不停的被调用,源数据的生成就在该函数中实现,然后数据流向下一节点,每个Topology中只允许有一个Spout。

  • Bolt:Topology中的组件,该组件接收上一节点(Spout或Bolt)发射过来的数据,该组件中有一个execute(Tuple tuple)方法,当接收到数据后该函数会被动执行,进行合并、筛选、持久化等操作。Bolt可以是Topology中一次完整的数据处理流程的终点,或者是转移点。

  • Tuple:Tuple是Storm中传递消息的基本单元,Tuple的数据结构为一个List。

  • Stream:连续不断的Tuple就组成了Stream。

  • Stream grouping:描述了数据在不同的组件(Spout/Bolt)之间流转时,partition的规则,类型如下:

1.shuffle Grouping:随机分组,随机派发stream里面的tuple,保证每个bolt接收到的tuple数目相同
2.Fields Grouping:按照字段分组,相同的字段会分配到相同的bolt,不同的字段分配到不同的Bolt
3.ALL Grouping:广播,对每一个tuple,所有的bolt都会收到
4.Global Grouping:全局分组,这个tuple被分配到storm的一个bolt的一个task内,即id最低的那个
5.Non Grouping:不分组,目前效果和Global Groouping一样
6.Direct Grouping:直接分组,指定消息的接收者。