我们为什么需要MapReduce?

来源:互联网 发布:什么是原油数据库存 编辑:程序博客网 时间:2024/05/16 02:26

我们为什么需要MapReduce?


  我们为什么不能使用数据库来对大量磁盘上的大规模数据进行批量分析呢?我们为什么要使用MapReduce?
  
   这些问题的答案来自磁盘的另一个发展趋势: 寻址时间的提高远远慢于传输速率的提高。寻址是将磁头移动到特定磁盘位置进行读写操作的过程。它是导致磁盘操作延迟的主要原因,因而传输速率取决于磁盘的带宽。
  
  如果数据的访问模式中包含大量的磁盘寻址,那么读取大量数据集所化的时间势必会更长(相较于流式数据读取模式),流式读取主要取决于传输速率。另一方面,如果数据库系统只更新一小部分记录,那么传统的B树更有优势。但数据库系统更新大部分数据时,B树的效率比MapReduce低得多,因为需要使用“排序/合并”来重建数据库。
  
  许多情况下,可以将MapReduce视为关系型数据库管理系统的补充。两个系统之间的差异如下表所示。MapReduce比较适合以批处理的方式处理需要分析整个数据集的问题,尤其是即席分析。RDBMS(关系型数据库管理系统)适用于“点查询”和更新,数据集被索引后,数据库系统能够提供低延迟的数据检索和快速的少量数据更新。MapReduce适合一次写入,多次读取数据的应用,而 关系型数据库更适合持续更新的数据集。
  关系型数据库和MapReduce的比较
  

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


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

1 0
原创粉丝点击