数据存储与分析
我们遇到的问题很简单:多年来磁盘存储容量快速增加的同时,其访问速度——磁 盘数据读取速度一却未能与时俱进。1990年,一个普通磁盘可存储1370 MB的 数据并拥有4.4MB/s的传输速度,因此,读取整个磁盘中的数据只需要5分钟。 20年后,1TB的磁盘逐渐普及,但其数据传输速度约为100MB/s,因此读取整个 磁盘中的数据需要约两个半小时。
读取一个磁盘中所有的数据需要很长的时间,写甚至更慢。一个很简单的减少读取 时间的办法是同时从多个磁盘上读取数据。试想,如果我们拥有100个磁盘,每个 磁盘存储1%的数据,并行读取,那么不到两分钟就可以读取所有数据。
仅使用磁盘容量的1%似乎很浪费。但是我们可以存储100个数据集,每个数据集 1 TB,并实现共享磁盘的访问。可以想象,该类系统的用户会很乐意使用磁盘共 享访问以便缩短数据分析时间;并且,从统计角度来看,用户的分析工作会在不同 的时间点进行,所以互相之间的干扰不会太大。
尽管如此,但要实现对多个磁盘数据的并行读写,还有更多的问题要解决。
第一个需要解决的问题是硬件故障。一旦使用多个硬件,其中任一硬件发生故障的概率将非常高。避免数据丢失的常见做法是使用备份:系统保存数据的冗余复本, 在发生故障后,可以使用数据的另一可用复本。例如,冗余磁盘阵列(RAID)就是按这个原理实现的,另外,Hadoop的文件系统,即HDFS(Hadoop Distributed FileSystem)一类,不过它采取的方法稍有不同。详见后文描述。
第二个问题是大多数分析任务需要以某种方式结合大部分数据共同完成分析任务, 即从一个磁盘读取的数据可能需要和从另外99个磁盘中读取的数据结合使用。各种分布式系统允许结合多个来源的数据并实现分析,但保证其正确性是一个非常^ 的挑战。MapReduce提出了一个编程模型,该模型将上述磁盘读写的问题进行抽 象,并转换为对一个数据集(由键/值对组成)的计算。后文将详细讨论该模型,需要 指出的是,该计算由map和reduce两部分组成,而只有这两部分提供对外的接 口。与HDFS类似,MapRedUCe自身也具有较高的可靠性。
简而言之,Hadoop提供了一个可靠的共享存储和分析系统。HDFS实现存储,而 MapReduce实现分析处理。纵然Hadoop还有其他功能,但这两部分是它的核心。