云计算 频道

初识Hadoop-《Hadoop权威指南》连载

  关系型数据库管理系统

  我们为什么不能使用数据库来对大量磁盘上的大规模数据进行批量分析呢?我们为什么需要MapReduce?

  这些问题的答案来自磁盘的另一个发展趋势:寻址时间的提高远远慢于传输速率的提高。寻址是将磁头移动到特定磁盘位置进行读写操作的过程。它是导致磁盘操作延迟的主要原因,而传输速率取决于磁盘的带宽。

  如果数据的访问模式中包含大量的磁盘寻址,那么读取大量数据集所花的时间势必会更长(相较于流式数据读取模式),流式读取主要取决于传输速率。另一方面,如果数据库系统只更新一小部分记录,那么传统的B树更有优势(关系型数据库中使用的一种数据结构,受限于寻址的比例)。但数据库系统更新大部分数据时,B树的效率比MapReduce低得多,因为需要使用“排序/合并“(sort/merge)来重建数据库。

  在许多情况下,可以将MapReduce视为关系型数据库管理系统的补充。两个系统之间的差异如表1-1所示。MapReduce比较适合以批处理的方式处理需要分析整个数据集的问题,尤其是即席分析。RDBMS适用于“点查询”(point query)和更新,数据集被索引后,数据库系统能够提供低延迟的数据检索和快速的少量数据更新。MapReduce适合一次写入、多次读取数据的应用,而关系型数据库更适合持续更新的数据集。

  表1-1. 关系型数据库和MapReduce的比较

 
传统关系型数据库
MapReduce
数据大小
GB
PB
访问
交互式和批处理
批处理
更新
多次读写
一次写入多次读取
结构
静态模式
动态模式
完整性
横向扩展
非线性
线性

  MapReduce和关系型数据库之间的另一个区别在于它们所操作的数据集的结构化程度。结构化数据(structured data)是具有既定格式的实体化数据,诸如XML文档或满足特定预定义格式的数据库表。这是RDBMS包括的内容。另一方面,半结构化数据(semi-structured data)比较松散,虽然可能有格式,但经常被忽略,所以它只能用作对数据结构的一般指导。例如,一张电子表格,其结构是由单元格组成的网格,但是每个单元格自身可保存任何形式的数据。非结构化数据(unstructured data)没有什么特别的内部结构,例如纯文本或图像数据。MapReduce对于非结构化或半结构化数据非常有效,因为在处理数据时才对数据进行解释。换句话说:MapReduce输入的键和值并不是数据固有的属性,而是由分析数据的人员来选择的。

  关系型数据往往是规范的(normalized),以保持其数据的完整性且不含冗余。规范化给 MapReduce带来了问题,因为它使记录读取成为异地操作,然而MapReduce的核心假设之一就是,它可以进行(高速的)流式读写操作。

  Web服务器日志是一个典型的非规范化数据记录(例如,每次都需要记录客户端主机全名,导致同一客户端全名可能会多次出现),这也是MapReduce非常适合用于分析各种日志文件的原因之一。

  MapReduce是一种线性可伸缩的编程模型。程序员编写两个函数,分别为map函数和reduce函数——每个函数定义一个键/值对集合到另一个键/值对集合的映射。这些函数无需关注数据集及其所用集群的大小,因此可以原封不动地应用到小规模数据集或大规模的数据集上。更重要的是,如果输入的数据量是原来的两倍,那么运行的时间也需要两倍。但是如果集群是原来的两倍,作业的运行仍然与原来一样快。SQL查询一般不具备该特性。

  但是在不久的将来,关系型数据库系统和MapReduce系统之间的差异很可能变得模糊。关系型数据库都开始吸收MapReduce的一些思路(如Aster DATA的和GreenPlum的数据库),另一方面,基于MapReduce的高级查询语言(如Pig和Hive)使MapReduce 的系统更接近传统的数据库编程方式。[1]

  [1] 2007年1月,David J. DeWitt和Michael Stonebraker发表的论文“MapReduce: A major step backwards”(http://databasecolumn.vertica.com/database-innovation/mapreduce- a-major-step-backwards)引起了人们的争论。在文中,他们认为MapReduce不适合替代关系型数据库。许多评论认为这是一种错误的比较(参见Mark C. Chu-Carroll的文章“Databasesare hammers; MapReduce is a screwdriver”(http://scienceblogs.com/ goodmath/2008/01/databases_are_hammers_mapreduc.php)及DeWitt与Stonebraker 的回复“MapReduce II”(http://databasecolumn.vertica.com/database-innovation/mapreduce-ii),他们对评论的主要观点进行了阐述。

0
相关文章