1.6 大数据计算模式
MapReduce 是被大家所熟悉的大数据处理技术,当人们提到大数据时就会很自然地想到MapReduce,可见其影响力之广。实际上,大数据处理的问题复杂多样,单一的计算模式是无法满足不同类型的计算需求的,MapReduce 其实只是大数据计算模式中的一种,它代表了针对大规模数据的批量处理技术,除此以外,还有查询分析计算、图计算、流计算等多种大数据计算模式(见表1-6)。本书后面内容将会介绍批处理计算(第7章)、流计算(第10章)和图计算(第11章)。
表1-6 大数据计算模式及其代表产品
1.6.1 批处理计算
批处理计算主要解决针对大规模数据的批量处理,也是我们日常数据分析工作中非常常见的一类数据处理需求。MapReduce是最具有代表性和影响力的大数据批处理技术,可以并行执行大规模数据处理任务,用于大规模数据集(大于1 TB)的并行运算。MapReduce极大地方便了分布式编程工作,它将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数——Map和Reduce上,编程人员在不会分布式并行编程的情况下,也可以很容易地将自己的程序运行在分布式系统上,完成海量数据集的计算。
Spark是一个针对超大数据集合的低延迟的集群分布式计算系统,比MapReduce快许多。Spark启用了内存分布数据集,除了能够提供交互式查询外,还可以优化迭代工作负载。在MapReduce中,数据流从一个稳定的来源进行一系列加工处理后,流出到一个稳定的文件系统(如HDFS)。而对于Spark而言,则使用内存替代HDFS或本地磁盘来存储中间结果,因此Spark要比MapReduce的速度快许多。
1.6.2 流计算
流数据也是大数据分析中的重要数据类型。流数据(或数据流)是指在时间分布和数量上无限的一系列动态数据集合体,数据的价值随着时间的流逝而降低,因此必须采用实时计算的方式给出秒级响应。流计算可以实时处理来自不同数据源的、连续到达的流数据,经过实时分析处理,给出有价值的分析结果。目前业内已涌现出许多的流计算框架与平台,第一类是商业级的流计算平台,包括IBM InfoSphere Streams和IBM StreamBase等;第二类是开源流计算框架,包括 Twitter Storm、Yahoo! S4(Simple Scalable Streaming System)、Spark Streaming 等;第三类是公司为支持自身业务开发的流计算框架,如 Facebook 使用 Puma 和HBase 相结合来处理实时数据,百度开发了通用实时流数据计算系统 DStream,淘宝开发了通用流数据实时计算系统——银河流数据处理平台。
1.6.3 图计算
在大数据时代,许多大数据都是以大规模图或网络的形式呈现,如社交网络、传染病传播途径、交通事故对路网的影响等,此外,许多非图结构的大数据也常常会被转换为图模型后再进行处理分析。MapReduce作为单输入、两阶段、粗粒度数据并行的分布式计算框架,在表达多迭代、稀疏结构和细粒度数据时,往往显得力不从心,不适合用来解决大规模图计算问题。因此,针对大型图的计算,需要采用图计算模式,目前已经出现了不少相关图计算产品。Pregel 是一种基于BSP(Bulk Synchronous Parallel)模型实现的并行图处理系统。为了解决大型图的分布式计算问题,Pregel 搭建了一套可扩展的、有容错机制的平台,该平台提供了一套非常灵活的 API,可以描述各种各样的图计算。Pregel主要用于图遍历、最短路径、PageRank计算等。其他代表性的图计算产品还包括 Facebook 针对 Pregel 的开源实现 Giraph、Spark 下的 GraphX、图数据处理系统PowerGraph等。
1.6.4 查询分析计算
针对超大规模数据的存储管理和查询分析,需要提供实时或准实时的响应,才能很好地满足企业经营管理需求。谷歌公司开发的Dremel是一种可扩展的、交互式的实时查询系统,用于只读嵌套数据的分析。通过结合多级树状执行过程和列式数据结构,它能做到几秒内完成对万亿张表的聚合查询。系统可以扩展到成千上万的CPU上,满足谷歌上万用户操作PB级的数据,并且可以在2~3s内完成PB级别数据的查询。此外,Cloudera公司参考Dremel系统开发了实时查询引擎Impala,它提供SQL语义,能快速查询存储在Hadoop的HDFS和HBase中的PB级大数据。