3.1 分布式计算框架
大数据管理目前面临的挑战主要来自数据规模庞大、数据类型多样以及处理及时性三个方面。为应对这些挑战,面向特定应用的分布式计算框架不断被提出。根据不同的使用场景,大致分为四大类:离线批量数据处理系统、在线流式计算系统、交互式数据处理系统和图计算系统。目前,比较典型的分布式计算框架有批量数据处理系统MapReduce[9]和Dryad[14]、流式计算系统Storm[11]、交互式数据处理系统Spark[12]及图计算系统Pregel[13]等。
MapReduce最早是2004年由Google公司研究提出的一种面向大规模数据处理的并行计算模型和方法。Google公司设计MapReduce的初衷主要是为了解决其搜索引擎中大规模网页数据的并行化处理。Google公司发明了MapReduce之后最初用其重新改写了搜索引擎中的Web文档索引处理系统,到目前为止,Google公司内有上万个各种不同的算法问题和程序都使用MapReduce进行处理。开源项目Lucene(搜索索引程序库)和Nutch(搜索引擎)的创始人Doug Cutting发现MapReduce正是其所需要的解决大规模Web数据处理的重要技术,因而模仿Google MapReduce,基于Java设计开发了一个称为Hadoop[10]的开源MapReduce并行计算框架和系统。自此,Hadoop成为Apache开源组织最重要的项目,很快得到了全球学术界和工业界的普遍关注,并得到推广和普及。MapReduce采用Master/Slave主从结构,将数据处理分成两个阶段:Map和Reduce计算函数的具体实现。通过Map函数把一个大的计算任务划分为多个小的计算任务,并分配给集群的各个计算节点执行,然后Reduce函数收集每个节点上的计算结果并输出。由于架构和实现方式等原因,MapReduce仍存在性能瓶颈、作业延迟高等局限性。
Storm是由Twitter公司提出基于类Lisp语言开发的一款实时处理大数据的开源流式计算分布式框架,弥补了MapReduce对流式大数据处理的功能欠缺,被广泛用于信息流处理、实时搜索、连续计算等实时数据流计算场景。数据流(Stream)是Storm的核心概念,一个数据流就是一个时间上无界的元组(Tuple)序列。任务拓扑(Topology)是Storm的逻辑单元。Storm集群中,实时应用的计算任务被打包为Topology发布。Topology任务提交之后,除非显示停止,否则该任务一直运行不会结束。Storm采取Master/Slave主从架构,集群中存在主节点Nimbus和从节点Supervisor。主节点仅有一个,负责系统资源分配、任务调度、状态监控和故障检测。从节点有多个,负责接收和执行主节点Nimbus分配的任务。为简化系统设计,Storm引入Zookeeper进行系统状态监控,提高了系统可靠性。Storm有很多优点,例如简化了编程模型、快速计算、支持多种编程语言等,但同时也存在资源分配的盲目性、容错机制的局限性等不足。
Spark是由UC Berkeley AMP Lab开源的交互式数据处理系统。Spark使用弹性分布数据集(Resilient Distributed Dataset,RDD)概念,用于表示已划分的只读数据集合。RDD可以缓存在内存中,进行并行操作。RDD主要特征有:在集群节点上不可变,节点失效自动恢复,可序列化,静态类型等。与分布式共享内存(Distributed Shared Memory,DSM)相比,RDD移动计算而非数据,避免了任意节点访问全局地址空间,并且RDD提供的编程模型更加严格,从而使得节点失效后无须通过检查点进行容错,恢复效率更高。Spark通过将中间数据存储于内存中,节省了读写磁盘开销,有效提升了迭代运算能力和内存计算效率,同时保持了MapReduce的可扩展性和容错性,是MapReduce在执行机器学习算法、数据挖掘等迭代运算场景下的优化。但是,Spark并不适用于增量修改的应用模型,如Web服务存储等。
Pregel是Google公司针对大规模图计算处理开发的分布式计算模型,弥补了MapReduce计算框架处理图数据应用的不足。受BSP(Bulk Synchronous Parallel)模型的启发,Pregel定义计算中一系列的迭代操作为超步(Superstep)。典型Pregel计算输入为有向图,在每个超步中节点进行并行运算,超步与超步之间设置整体同步点(Global Synchronization Points),确保所有节点都完成后再进行下个超步运算。Pregel在进行运算前,所有节点都处于活跃状态并参与运算。完成计算任务后节点对自身进行“投票停止”,当进入停止状态时,如果有新的计算任务到达,节点放弃等待状态再次进入活跃状态。当所有节点都进入停止状态时,表示整个计算任务完成,算法结束。Pregel在整体架构上仍然采用主从模型,主节点Master对图进行划分,并分配给工作节点Worker执行;工作节点维护本节点上划分的状态,执行用户的计算任务并管理与其他工作节点之间传递的消息,计算完成后,将结果返回给主节点。目前,Pregel的应用主要有网页排序、最短路径、偶匹配和半聚类算法。
Dryad是微软公司设计的通用粗粒度分布式计算引擎,核心概念是计算节点Vertices和数据通道Channel。Dryad中每个任务都作为有向无环图,节点代表程序段,边代表数据通道。计算节点Vertices上的运算由用户定义实现,计算节点之间通过数据通道传输数据。Dryad框架对作业的处理只在计算节点Vertices上发生,并且不区分计算阶段,这是与MapReduce最大的区别。鉴于这一特点,Dryad具有更大的通用性和灵活性,但也在一定程度上增加了用户使用的难度。
表3-1对比了上述五种分布式计算框架,它们代表了大数据管理技术在批量处理、流式处理、交互式处理以及图数据处理等特定应用场景下较为典型的解决方案。由于MapReduce编程模型简单,且自动实现副本备份、集群容灾、负载均衡等技术细节,以MapReduce分布式计算框架为基础的Hadoop计算平台,在大数据管理领域十分流行,因为其开源的特点,基于该平台的二次开发也较为容易。
表3-1 几种典型分布式计算框架对比