【摘要】:Map Reduce是一个编程模型,用于对数据敏感的通用目标实现并行处理。更重要的是,Map Reduce程序本质上是并行运行的,其优势在于能处理大规模数据集。表18.1关系型数据库和Map Reduce的比较Map Reduce和关系型数据库的一个区别在于,它们所操作的数据集的结构化程度不同。换句话说,Map Reduce输入的键和值并不是数据固有的属性,而是由分析数据的人员来选择的。但是在不久的将来,关系型数据库系统和Map Reduce系统之间的差异很可能变得模糊。
Map Reduce是一个编程模型,用于对数据敏感的通用目标实现并行处理。Map Reduce将处理过程分成两个阶段:①映射(map)阶段,将数据分解成组块(chunks)让分开的线程处理-运行在分开的机器上;②归约(reduce)阶段,将来自mappers的数据组合成最后结果。它方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。Map Reduce是一种可用于数据处理的编程模型。Hadoop上可以运行由各种语言编写的Map Reduce程序。当前的软件实现是指定一个map(映射)函数,用来把一组键/值对映射成一组新的键/值对,指定并发的reduce(归约)函数,以保证所有映射的键/值对中的每个键/值对共享相同的键组。更重要的是,Map Reduce程序本质上是并行运行的,其优势在于能处理大规模数据集。
关系型数据库与Map Reduce的比较如表18.1所示。
表18.1 关系型数据库和Map Reduce的比较

Map Reduce和关系型数据库的一个区别在于,它们所操作的数据集的结构化程度不同。一方面,结构化数据(structured data)具有既定格式的实体化数据,诸如XML文档或满足特定预定义格式的数据库表(关系)。另一方面,半结构化数据(semi-structured data)比较松散,虽然可能有格式,但经常被忽略,所以它只能用作对数据结构的一般指导。例如,一张电子表格,其结构是由单元格组成的网格,但是每个单元格自身可保存任何形式的数据。非结构化数据(unstructured data)没有什么特别的内部结构,例如纯文本或图像数据。Map Reduce对于处理非结构化或半结构化数据非常有效,因为在处理数据时才对数据进行解释。换句话说,Map Reduce输入的键和值并不是数据固有的属性,而是由分析数据的人员来选择的。(www.chuimin.cn)
关系型数据往往是规范的(normalized),以保持其数据的完整性且不含冗余数据。规范化给Map Reduce带来了问题,因为Map Reduce的核心假设之一就是可以进行(髙速的)流式读/写操作。
Web服务器日志是一个典型的非规范化数据记录(例如,每次都需要记录客户端主机全名,导致同一客户端全名可能会多次出现),不具有完整性且不含冗余的规范化特征,这也是Map Reduce非常适合于分析各种日志文件的原因之一。
Map Reduce是一种线性可伸缩的编程模型。程序员编写两个函数,分别为map函数和reduce函数,每个函数定义一个键/值对并集合到另一个键/值对集合的映射。这些函数无需关注数据集及其所用集群的大小,因此可以原封不动地应用到小规模数据集或大规模数据集上。更重要的是,如果输入的数据量是原来的两倍,那么运行的时间也需要两倍。但是,如果集群是原来的两倍,作业的运行速度仍然与原来的一样快。SQL査询一般不具备该特性。
但是在不久的将来,关系型数据库系统和Map Reduce系统之间的差异很可能变得模糊。一方面,关系型数据库都开始吸收Map Reduce的一些思路(如Aster DATA和GreenPlum的数据库),另一方面,基于Map Reduce的髙级査询语言(如Pig和Hive)使Map Reduce的系统更接近传统的数据库编程方式。
相关推荐