7
2013年4月
洗衣篓一、简述
Google在2003年开始陆续公布了关于GFS、MapReduce和BigTable三篇技术论文,这也成为后来云计算发展的重要基石,为数据领域工作者开启了大数据算法之门。然而Google的大数据脚步显然不止于此,其后公布了Percolator、Pregel、Dremel、Spanner等多篇论文。没有止步的不仅是Google,很多公司也跟随其脚步开发了很多优秀的产品,虽然其中不乏模仿。主流的大数据基本都是MapReduce的衍生,然而把目光聚焦到实时上就会发现:MapReuce的局限性已经渐渐浮现。下面将讨论一下自大数据开始,Google公布的大数据相关技术,以及这些技术的现状。
从2010年之后Google在后Hadoop时代的新“三驾马车”——Caffeine、Pregel、Dremel再一次影响着全球大数据技术的发展潮流。但这还远远不够,目前Google内部使用的大数据软件Dr
emel使大数据处理起来更加智能。
二、Google经典三篇大数据论文介绍
Google在2003年到2006年公布了关于GFS、MapReduce和BigTable三篇技术论文。
三篇论文主要阐述:
2.1、GFS
公布时间:2003年。
手套编织机
GFS阐述了Google File System的挂包钩
设计原理,GFS是一个面向大规模数据密集型应用的、可伸缩的分布式文件系统。GFS虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服务。 虽然GFS的设计目标与许多传统的分布式文件系统有很多相同之处,但是,我们设计还是以我们对自己的应用的负载情况和技术环境的分析为基础的,不管现在还是将来,GFS和早期的分布式文件系统的设想都有明显的不同。所以我们重新审视了传统文件系统在设计
上的折衷选择,衍生出了完全不同的设计思路。
GFS完全满足了我们对存储的需求。GFS作为存储平台已经被广泛的部署在Google内部,存储我们的服务产生和处理的数据,同时还用于那些需要大规模数据集的研究和开发工作。 目前为止,最大的一个集利用数千台机器的数千个硬盘,提供了数百TB的存储空间,同时为数百个客户机服务。
为了满足Google迅速增长的数据处理需求,我们设计并实现了Google文件系统(Google File System –GFS)。GFS 与传统的分布式文件系统有着很多相同的设计目标,比如,性能、可伸缩性、可靠性以及可用性。但是,我们的设计还基于我们对我们自己的应用的负载情况和技术环境的观察的影响,不管现在还是将来,GFS 和早期文件系统的假设都有明显的不同。所以我们重新审视了传统文件系统在设计上的折衷选择,衍生出了完全不同的设计思路。 首先,组件失效被认为是常态事件,而不是意外事件。GFS 包括几百甚至几千台普通的廉价设备组装的存储机器,同时被相当数量的客户机访问。GFS 组件的数量和质量导致在事实上,任何给定时间内都有可能发生某些组件无法工作,某些组件无法从它们目前的失效
状态中恢复。我们遇到过各种各样的问题,比如应用程序bug 、操作系统的bug 、人为失误,甚至还有硬盘、内存、连接器、网络以及电源失效等造成的问题。所以,持续的监控、错误侦测、灾难冗余以及自动恢复的机制必须集成在GFS 中。
其次,以通常的标准衡量,我们的文件非常巨大。数GB的文件非常普遍。每个文件通常都包含许多应用程序对象,比如web文档。当我们经常需要处理快速增长的、并且由数亿个对象构成的、数以TB的数据集时,采用管理数亿个KB大小的小文件的方式是非常不明智的,尽管有些文件系统支持这样的管理方式。因此,设计的假设条件和参数,比如I/O 操作和Block的尺寸都需要重新考虑。
第三,绝大部分文件的修改是采用在文件尾部追加数据,而不是覆盖原有数据的方式。对文件的随机写入操作在实际中几乎不存在。一旦写完之后,对文件的操作就只有读,而且通常是按顺序读。大量的数据符合这些特性,比如:数据分析程序扫描的超大的数据集;正在运行的应用程序生成的连续的数据流;存档的数据;由一台机器生成、另外一台机器处理的中间数据,这些中间数据的处理可能是同时进行的、也可能是后续才处理的。对于这种针对海量文件的访问模式,客户端对数据块缓存是没有意义的,数据的追加操作是性能优化和原子性保证的主要考量因素。
精准灌溉系统海棠第四,应用程序和文件系统API的协同设计提高了整个系统的灵活性。比如,我们放松了对GFS 一致性模型的要求,这样就减轻了文件系统对应用程序的苛刻要求,大大简化了GFS 的设计。我们引入了原子性的记录追加操作,从而保证多个客户端能够同时进行追加操作,不需要额外的同步操作来保证数据的一致性。本文后面还有对这些问题的细节的详细讨论。 Google已经针对不同的应用部署了多套GFS 集。最大的一个集拥有超过1000个存储节点,超过300TB的硬盘空间,被不同机器上的数百个客户端连续不断的频繁访问。
2.2、MapReduce
公布时间:2004年。
MapReduce是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现。用户首先创建一个Map函数处理一个基于key/value pair 的数据集合,输出中间的基于key/value pair 的数据集合;然后再创建一个Reduce 函数用来合并所有的具有相同中间key 值的中间value 值。现实世界中有很多满足上述处理模型的例子,本论文将详细描述这个模型。
MapReduce架构的程序能够在大量的普通配置的计算机上实现并行化处理。这个系统在运行时只关心:如何分割输入数据,在大量计算机组成的集上的调度,集中计算机的错误处理,管理集中计算机之间必要的通信。采用MapReduce架构可以使那些没有并行计算和分布式处理系统开发经验的程序员有效利用分布式系统的丰富资源。
我们的MapReduce实现运行在规模可以灵活调整的由普通机器组成的集上:一个典型的MapReduce计算往往由几千台机器组成、处理以TB计算的数据。程序员发现这个系统非常好用:已经实现了数以百计的MapReduce程序,在Google的集上,每天都有1000多个MapReduce程序在执行。
2.3、BigTable一个分布式的结构化数据存储系统
公布时间麻元友:2006年。
Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据。Google的很多项目使用Bigtable存储数据,包括Web索引、Google Earth、Google Finance 。这些应用对Bigtable提出的要求差异非常大,
无论是在数据量上(从URL 到网页到卫星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。尽管应用需求差异很大,但是,针对Google的这些产品,Bigtable还是成功的提供了一个灵活的、高性能的解决方案。本论文描述了Bigtable提供的简单的数据模型,利用这个模型,用户可以动态的控制数据的分布和格式。
老三篇即使我们常用的Hadoop系统的设计理论基石。虽然Google没有公布这三个产品的源码,但是根据google发布了这三个产品的详细设计论文。而且,Yahoo资助的Hadoop也有按照这三篇论文的开源Java实现:Hadoop对应Mapreduce, Hadoop Distributed File System (HDFS)对应Google fs,Hbase对应Bigtable。不过在性能上Hadoop比Google要差很多