云计算中的大数据处理技术--MapReduce
MapReduce计算架构把运行在大规模集群上的并行计算过程简单抽象为两个函数:Map和Reduce,也就是分解与规约。简单说,MapReduce就是“任务的分解与结果的汇总”。程序将大数据分解为多个数据块由Map函数处理,Reduce把分解后多任务处理产生的中间结果汇总起来,得到最终结果。适合MapReduce处理的任务特征为:待处理的大规模数据集可以切分为多个小的数据集,并且每一个小数据集都可以完全并行地进行处理。
图1介绍了用MapReduce处理大数据集的过程。一个MapReduce操作分为两个阶段:Map阶段和Reduce阶段。
图1 MapReduce处理大数据集的过程
图1 MapReduce处理大数据集的过程
在映射阶段,MapReduce并行计算架构将用户的输入数据切分为M个数据段,每个数据段对应1个Map任务。每一个Map函数的输入是数据段中的键值对<K1,V1>集合, Map函数是用户继承MapReduce并行计算架构而编写的,Map操作调用此函数,输出一组中间结果,即键值对<K2,V2> 集合。接下来,按照中间结果集合的K2将中间结果集进行排序,生成一个新的<K2,list(V2)> 集合,使得对应同一个K2的所有值的数据都聚集在一起。然后,按照K2的范围将这些元组分割为R个片断,对应Reduce任务的数目。在规约阶段,每一个Reduce操作的输入是一个<K2,list(V2)>片断,Reduce操作调用用户定义的Reduce函数,生成用户需要的键值对<K3,V3>进行输出。
这种简洁的并行计算模型在系统层面解决了可用性、扩展性、容错性等问题,是非关系数据管理和分析技术的典型代表。MapReduce是面向廉价计算机组成的大规模集群设计的,其非共享结构、松耦合性和较强的容错能力带来了较强的扩展能力,同时,
MapReduce在工业界被广泛应用,Google、twitter、Facebook、Yahoo等厂商对其进行了深度的改进和扩展。此外,MapReduce的<key,value>存储模型能够存储任意格式的数据,Map和Reduce函数可以进行各种复杂的数据处理,这也使得程序员的负担加重,在对上层业务的开发效率上不如SQL简单。在相同的硬件条件下,对于有具体条件的查询来说,并行数据库的性能是远远超过MapReduce的,但是对于在大数据上的复杂统计业务来说,
MapReduce在速度上会占有一定优势,MapReduce是为非结构化大数据的复杂处理而设计的,这些业务具有一次性处理的特点,此外由于采取了全数据扫描的模式以及对中间结果逐步汇总的策略,使其在拥有良好扩展能力和容错能力的同时也导致了较高的磁盘和网络I/O的负载以及较高的数据解析代价。
并行数据库技术
在上世纪80年代,数据库流行的同时并行数据库也开始起源,早期并行数据库(例如:Gamma和Grace)的基础架构被沿用至今,当前的并行数据库主要有Oracle的Exdata、EMC的Greenplum、Teradata和,这些数据库都支持标准SQL。并行数据库一般可以分为shared-nothing和shared-disk两种存储架构,如图2所示。这两种架构有各自的优缺点,在shared-nothing系统中,数据集被切分为多个子集,集群中每个节点分别存储。
shared-nothing和shared-disk存储架构
一个子集在本地磁盘上,一般来说,shared-nothing系统可以提供很高的并行I/O和并行计算能力,但是也有多节点事务处理、数据传输以及数据倾斜等问题。在shared-disk系统中,数据被集中存储,所有的数据库节点都可以访问存储系统的任意一个磁盘,因此数据也没有必要被切分,这也避免了数据倾斜的问题,这种系统主要的缺陷在于较低的I/O带宽和扩展能力。
云计算与数据库相结合的技术
与数据库相结合的云计算技术一般指的是MapReduce技术,当前主要有Teradata公司的Aster Data[15]和耶鲁大学提出的HadoopDB。
Aster Data将MapReduce与SQL引擎相结合,针对大数据处理和分析提出了SQL/MapReduce框架,用户可以使用JAVA、C++等多种语言在Aster Data的并行框架上编写MapReduce函数,编写的函数可以作为一个子查询在SQL中使用,从而获得SQL的易用性和MapReduce的开放性。同时Aster Data能够对多结构化数据、原始数据进行处理和分析,并拥有丰富的统计软件包可以讲数据分析推向数据库内进行,提升了数据分析性能。
在HadoopDB 中,系统清晰地分成两层,上层使用 Hadoop 进行任务的分解和调度,下层用 RDBMS(Postgresql)进行数据的查询和处理,在处理查询时,执行的是SQL to mapReduce to SQL操作过程(SMS planner)。该工作的创新之处是:试图利用 Hadoop 的任务调度机制提高系统的扩展性和容错性,以解决大数据分析的横向扩展问题;利用 RDBMS 实现数据存储和查询处理,以解决性能问题.在其性能实验中,HadoopDB 的性能仍然落后于关系数据库系统.如何提升MapReduce的性能,已引起研究人员的高度重视,研究人员提出了MapReduce的各种优化技术,获得了重要的性能改进.Yale 大学 Abadi 领导的小组正在使用包括列存储、持续装载和分析(continuous loading and analysis)等技术,以改进 HadoopDB 的性能。
HadooopDB结构
图3是HadooopDB的一个结构图,在原来的hadoop与hive的基础上,增加了一些组件:其中SMS Planner的作用是在hive解析SQL语句生成MapReduce任务树之后,对MapReduce任务树进行优化,指导hadoop去并行数据库中执行SQL。Catalog里面存储了并行数据库的一些信息。Data loader负责把原始数据加载到并行数据库中,需要完成的工作是对原始数据的划分。Database Connector用于向各个节点传递信息,包含了节点里面数据库的链接信息和需要执行的SQL语句。Paralled DataBase用于代替HDFS在各个节点上存储数据。
新一代EB级云计算数据库--数据立方
通过对MapReduce、并行数据库和两者的混合技术研究,南京云创存储科技有限公司推出了实施云计算数据库--数据立方,该系统通过引入索引模块、并行执行架构以及读取本地磁盘的执行方式,使查询达到了实时完成、简单易用、高可靠安全的效能,使EB级的数据能够秒级处理,极大地提高了用户执行查询操作后的使用效率,不仅在查询和检索这部分数据的时候具有非常高的性能优势,数据立方还可以支持数据仓库存储、数据深度挖掘和商业智能分析等业务。