我们生活在这个数据大爆炸的时代 ,很难估算全球电子设备中存储的数据总共有多少 。当前一个中小型公司的数据量也达到数十TB,甚至更多。
有句话说得好 :“ 大数据胜于好算法 。” 意思是说对于某些应用 (譬如根据以往的偏好来推荐电影和音乐),不论算法有多牛 ,基于小数据的推荐效果往往都不如基于大量可用数据的 一般算法的推荐效果 。
我们遇到的问题很简单:在硬盘存储容量多年来不断提升的同时,访问速 度(硬盘数据读取速度)却没有与时俱进 。
第二个问题是大多数分析任务需要以某种方式结合大部分数据来共同完成分析 ,即从一个硬盘读取的数据可能需要与从另外 99 个硬盘中读取的数据结合使用 。各种分布式系统允许结合不同来源的数据进行分析,但保证其正确性是一个非常大的挑战 。
MapReduce 提出一个编程模型 ,该模型抽象出这些硬盘读写问题井将其转换为对一个数据集(由键值对组成)的计算 。后文将详细讨论这个模型 ,这样的计算由 map 和 reduce 两部分组成 ,而且只有这两部分提供对外的接口 。与HDFS 类似,MapReduce自身也有很高的可靠性 。
MapReduce 看似采用了一种蛮力方法 。每个查询需要处理整个数据集或至少一个数据集的绝大部分 。但反过来想,这也正是它的能力 。MapReduce 是一个批量查询处理器 ,能够在合理的时间范围内处理针对整个数据集的动态查询 。它改变了我们对数据的传统看法 ,解放了以前只是保存在磁带和硬盘上的数据 。它让我们有机会对数据进行创新 。以前需要很长时间处理才能获得结果的问题 ,到现在变得顷刻之间就迎刃而解 ,同时还可以引发新的问题和新的见解 。
Hadoop 是 Apache Lucene 创始人Doug Cutting 创建的 ,Lucene 是一个应用 广 泛 的文本搜索系统库Hadoop起源于开 源的网络搜索引擎Apache Nutch,它本身也是 Lucene 项目的一部分 。
下面列出了所有大数据处理方法中的一些共同特征:
数据分布在多个节点(网络I/O)速度<<本地磁盘I/O速度)
计算程序离数据更近(集群上的节点),而不是相反
数据的处理尽量在本地完成(网络I/O速度<<本地磁盘I/O速度)
使用可顺序读取磁盘I/O代替随机读取磁盘I/O(数据交换速度<<数据寻道时间)
所有大数据计算处理模式都有一个目的,就是使输入/输出(I/O)并行化,从而提高数据处理性能
把数据分发到多个节点
根据定义,大数据是无法仅靠单台计算机资源来处理的。大数据的一个特点就是使用商用服务器。
需要注意的是,把要处理的数据分布存放在多个计算节点,并不是因为这些数据的数据量比较巨大。大数据处理系统会有条不紊的在各个计算节点上计算处理所分配的数据。把数据分布到各个服务器节点的最终目的是为了让计算节点同时参与数据的处理过程中来。
这样的数据分发会有两点好处:
1.每个数据块会在多个节点上有多份拷贝(Hadoop默认是一个数据块有3份拷贝),这使得系统具备容错性,当一个节点发生故障,其他节点还备份有故障节点上的数据。
2.为了达到数据并行处理的目的,多个节点可以同时参与数据处理过程,每个节点仅处理分配给自己的数据集,可以达到数据处理性能5-10倍的提升。