1.1.1 谷歌的大数据和分布式计算

在想到大规模计算时,我们很难不想到搜索引擎谷歌,它为互联网上来自全世界的数据做了索引,并且能够提供极快的检索功能。谷歌这个名字就是“大规模”的同义词。实际上,谷歌的英文名 Google 正是改写自数学术语 googol,意思是 1 后面带 100 个 0。

不论是关系数据库管理系统(relational database management system,RDBMS)这种传统的存储系统,还是传统的命令式编程,都没有能力满足谷歌构建和搜索全网索引文档的超大规模需求。于是,这种对新方法的需求最终孕育出了谷歌文件系统(Google File System,GFS)、MapReduce(MR)编程框架,以及 Bigtable 数据存储。

GFS 使用大量的标准硬件服务器来搭建集群,提供容错的分布式文件系统,而 Bigtable 则基于 GFS 提供可伸缩的结构化数据存储。基于函数式编程,MR 则为分布在 GFS 和 Bigtable 上的大规模数据处理引入了一种新的并行编程范式。

从本质上说,MR 应用程序与 MR 系统交互,将用于计算的代码逻辑(映射函数和归约函数)发送到存储数据的地方来执行,从而实现在本机或集群同一机架内处理数据,而不是让应用程序远程拉取数据。

集群中的工作节点对中间计算结果做归约和聚合操作,并通过归约函数生成最终的输出结果,然后将结果写入分布式存储,以便其他程序读取。这种方式显著减少了网络开销,将绝大部分输入输出(I/O)操作限定在本地磁盘,从而避免跨网络读写。

谷歌的绝大部分工作成果是私有的,不过关于 GFS、MR 和 Bigtable 的论文在开源社区激起了千层浪,尤其是雅虎,毕竟雅虎的搜索引擎也面临类似的、超大规模的大数据挑战。