分布式处理框架 Hadoop 和 Storm

离线数据批处理模型

Hadoop,大家一定不会陌生。使用了Google的Map/Reduce模型的Hadoop框架,能够将大量的廉价机器作为服务的集群,提供分布式计算的服务。Map/Reduce模型采用分而治之的理念,便意味着面对的群体是大批量的数据处理。Hadoop下的Map/Reduce框架对于数据的处理流程是(借助《深入浅出云计算》里的图):

分布式处理框架 Hadoop 和 Storm

Mapreduce处理图

1、 将要处理的数据上传到Hadoop的文件系统HDFS中。

2、 Map阶段

a)        Master对Map的预处理:对于大量的数据进行切分,划分为M个16~64M的数据分片(可通过参数自定义分片大小)

b)        调用Mapper函数:Master为Worker分配Map任务,每个分片都对应一个Worker进行处理。各个Worker读取并调用用户定义的Mapper函数处理数据,并将结果存入HDFS,返回存储位置给Master。

一个Worker在Map阶段完成时,在HDFS中,生成一个排好序的Key-values组成的文件。并将位置信息汇报给Master。

3、 Reduce阶段

a)        Master对Reduce的预处理:Master为Worker分配Reduce任务,他会将所有Mapper产生的数据进行映射,将相同key的任务分配给某个Worker。

b)        调用Reduce函数:各个Worker将分配到的数据集进行排序(使用工具类Merg),并调用用户自定义的Reduce函数,并将结果写入HDFS。

每个Worker的Reduce任务完成后,都会在HDFS中生成一个输出文件。Hadoop并不将这些文件合并,因为这些文件往往会作为另一个Map/reduce程序的输入。

以上的流程,粗略概括,就是从HDFS中获取数据,将其按照大小分片,进行分布式处理,最终输出结果。从流程来看,Hadoop框架进行数据处理有以下要求:

1、 数据已经存在在HDFS当中。

2、 数据间是少关联的。各个任务执行器在执行负责的数据时,无需考虑对其他数据的影响,数据之间应尽可能是无联系、不会影响的。

使用Hadoop,适合大批量的数据处理,这是他所擅长的。由于基于Map/Reduce这种单级的数据处理模型进行,因此,如果数据间的关联系较大,需要进行数据的多级交互处理(某个阶段的处理数据依赖于上一个阶段),需要进行多次map/reduce。又由于map/reduce每次执行都需要遍历整个数据集,对于数据的实时计算并不合适,于是有了storm。

在线实时流处理模型

对于处理大批量数据的Map/reduce程序,在任务完成之后就停止了,但Storm是用于实时计算的,所以,相应的处理程序会一直执行(等待任务,有任务则执行)直至手动停止。

对于Storm,他是实时处理模型,与hadoop的不同是,他是针对在线业务而存在的计算平台,如统计某用户的交易量、生成为某个用户的推荐列表等实时性高的需求。他是一个“流处理”框架。何谓流处理?storm将数据以Stream的方式,并按照Topology的顺序,依次处理并最终生成结果。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/c0cb06d3f8778b8edaad14cb8c1077bd.html