Google三驾马车:GFS、MapReduce和Bigtable

互联网企业的技术人员通常有两个大的方向,一个是做大规模高并发的线上服务,另外一个是做大数据分析。而大数据分析的鼻祖型论文就是“谷歌三驾马车”。这包括处理分布式数据的mapreduce、存储大量数据的gfs以及列式存储bigtable,当前流行的大数据技术都是在谷歌发表了这三大论文以后,不断的发展起来的,典型的就是Apache开源的hadoop和hbase,其中hadoop的mapreduce和hdfs的思想来源于谷歌mapreduce和gfs论文,而hbase来源于谷歌的bigtable论文。
1.谷歌三驾马车地位
聊起大数据,我们通常言必称谷歌,谷歌有“三驾马车”:谷歌文件系统(GFS)、MapReduce和BigTable。谷歌的“三驾马车”开启了大数据时代,并为我们指明了大数据的发展方向。
2.谷歌三驾马车诞生
(1)诞生时间
大数据在2010年开始有火起来的苗头,谷歌三驾马车诞生更早。谷歌文件系统第一次公开发表的论文是在2003年,MapReduce公开发表的时间是2004年,而BigTable则公开发表于2006年。
(2)诞生背景
三驾马车”,主要是为谷歌的核心搜索业务服务的。谷歌搜索业务,需要存储整个互联网的内容,并且要在这个内容的基础上构建倒排索引。
谷歌文件系统:基于大量的廉价个人计算机的海量存储系统,它可以轻松地存储整个互联网的内容。
MapReduce:海量数据计算引擎,是Google第一代倒排索引基础,它可以大规模并行地处理整个互联网上的所有文档。有天然缺陷,每次更新索引需全量更新所有索引,耗时几天,新的信息更新不及时。
BigTable:一个键值存储系统,可存储一个主键的不同时期的多个版本的值。使用互联网地址作为某个BigTable的主键,只更新那些值已经发生变化的互联网地址,可实现增量更新索引。
Tips:倒排索引是对互联网内容的一种索引方法,是指从搜索词到对应的互联网文档的索引方法。用户可以通过搜索词去搜索互联网,返回的则是和搜索词相关的文档。之所以称为倒排索引,是因为文档到文档里面的词是顺序的,而从文档里面的词到文档是逆序的。
3.谷歌三架马车简略介绍

  1. Google FS
    GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问应用。它运行于廉价的普通硬件上,提供容错功能。

不管现在还是将来,GFS 和早期文件系统的假设都有明显的不同。
1.首先,组件失效被认为是常态事件,而不是意外事件。
2.其次,以通常的标准衡量,我们的文件非常巨大。
3.第三,绝大部分文件的修改是采用在文件尾部追加数据,而不是覆盖原有数据的方式。
4.第四,应用程序和文件系统 API 的协同设计提高了整个系统的灵活性。

(1)GFS的结构

1. GFS的结构由一个master和大量的chunkserver构成骆正红 大数据与人工智能

2. Google设置了一个主来保存目录和索引信息,这是为了简化系统结果,提高性能来考虑的,但是这就会造成主成为单点故障或者瓶颈。为了消除主的单点故障Google把每个chunk设置的很大(64M),这样,由于代码访问数据的本地性,application端和master的交互会减少,而主要数据流量都是Application和chunkserver之间的访问。

3. 另外,master所有信息都存储在内存里,启动时信息从chunkserver中获取。提高了master的性能和吞吐量,也有利于master当掉后,很容易把后备j机器切换成master。

4. 客户端和chunkserver都不对文件数据单独做缓存,只是用linux文件系统自己的缓存

(2)GFS的复制

GFS典型的复制到3台机器上骆正红 大数据与人工智能

(3) 对外的接口

和文件系统类似,GFS对外提供create, delete,open, close, read, 和 write 操作。另外,GFS还新增了两个接口snapshot and record append,snapshot。

  1. MapReduce
      MapReduce是针对分布式并行计算的一套编程模型。骆正红 大数据与人工智能

讲到并行计算,就不能不谈到微软的Herb Sutter在2005年发表的文章” The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software”[6],主要意思是通过提高cpu主频的方式来提高程序的性能很快就要过去了,cpu的设计方向也主要是多核,超线程等并发上。但是以前的程序并不能自动的得到多核的好处,只有编写并发程序,才能真正获得多核的好处。分布式计算也是一样。

1)MapReduce是由Map和reduce组成,来自于Lisp,Map是影射,把指令分发到多个worker上去,Reduce是规约,把Map的worker计算出来的结果合并。

2)Google的MapReduce实现使用GFS存储数据。

3)MapReduce可用于Distributed Grep,Count of URL Access Frequency,ReverseWeb-Link Graph,Distributed Sort,Inverted Index

  1. Bigtable
      就像文件系统需要数据库来存储结构化数据一样,GFS也需要Bigtable来存储结构化数据。

1)BigTable 是建立在 GFS ,Scheduler ,Lock Service 和 MapReduce 之上的。

2)每个Table都是一个多维的稀疏图

3)为了管理巨大的Table,把Table根据行分割,这些分割后的数据统称为:Tablets。每个Tablets大概有 100-200 MB,每个机器存储100个左右的 Tablets。底层的架构是:GFS。由于GFS是一种分布式的文件系统,采用Tablets的机制后,可以获得很好的负载均衡。比如:可以把经常响应的表移动到其他空闲机器上,然后快速重建。

相关文章: