大概两年前,写过一篇<<大数据量,海量数据 处理方法总结>>,之后应该被转载甚多,估计很多人看到过。当时更多的解决的是面试场景的问题,介绍的都是些基础的数据结构。实际上与实际的海量数据处理还有些距离,可以用来准备下面试,但是真正的海量数据处理都是建立在很多系统之上的,当然它们底层也会用到各种数据结构。

进来比较流行的是云计算,NoSql。Hadoop也逐渐成为很多公司的生产系统。大概去年开始阅读分布式相关的论文,为了加深印象我通常会翻译出来。作为一种阶段性的总结,把一些东西整理了一下。整个Hadoop完全建立在Google所发表的几篇论文之上,除Google这个系列之外,Amazon的Dynamo也是另一个重要的NoSql分支。这次整理的主要是Google发表的奠定云计算基础的几篇论文还有一个关于海量数据存储计算查询的综述性文章,包含如下几篇:

Cluster:发表于2003年,主要介绍Google的集群架构,对Google搜索系统的架构也进行了简单介绍

GFS:发表于2003年,介绍了Google分布式文件系统的设计及实现。Hadoop中与之对应的是HDFS

MapReduce:发表于2004年,介绍了分布式的编程模型MapReduce。Hadoop中与之对应的是Hadoop MapReduce

BigTable:发表于2006,介绍了建立在GFS之上的结构化数据存储系统,Hadoop中与之对应的是HBase

Chubby:发表于2006年,分布式锁服务系统,利用了很多现有的思想,尤其是分布式系统中的很多基础理论。Hadoop中与之对应的是Zookeeper

Sawzall:发表于2006年,建立在MapReduce之上的分布式查询脚本语言。Hadoop中与之对应的是Pig Hive等

GFS访谈录:Kirk McKusick&Sean Quinlan关于GFS的起源和演化的访谈内容。可能比GFS本身更有意思。

SMAQ:关于海量数据的存储计算及查询的一个综述性文章。将视野从Google系列扩展到了当今流行的各种NoSql系统。

另所有论文加起来太长,只贴下序吧,具体的内容见附件。



大概一年前,翻译了google的Cluster,GFS,MapReduce,BigTable这几篇论文。随着工作的进行及参阅资料的增加,是时候重新看下当年翻译的内容了。看后也发现了一些笔误及理解不到位的地方,于是应该重新做下修正。但是由于之前的文章散落在blog上的各处,而篇幅又都比较长,实在懒得修改原来的内容。幸好我通常都会将blog上的文章先在本地编辑,所以干脆直接修改本地的版本吧,然后整理在一块。

所以呢,一方面重新检查下原来翻译的内容,对其中不当的地方予以纠正,同时又添加了一些理解性的文字。另一方面,当初在翻译这些论文时,实际上刻意留下了一篇Chubby,主要是因为这个涉及到比较基础的分布式理论,当时理解起来显得要比其他几篇吃力,索性就留了下来等以后再翻。现在呢,在看完拜占庭将军问题、FLP结论、Leases、Paxos这几个之后,我想重新阅读Chubby的时机也到了,所以呢这次就加上了Chubby这篇。

此外,如果要构成完整的SMAQ体系,实际上还应该加上Sawzall,不过这篇相对容易理解一些,同时网上也已存在比较好的中文版本,所以不再翻译,当然其他几篇网上也基本上都存在中文版本(GFS,MapReduce,BigTable应该很容易找到,关于Cluster和Chubby的则比较难找),但是它们是如此之重要,为了加深印象和理解,我还是自行将它们翻译了出来,当然这也是当时的初衷了。

当然呢,google的这些论文都已经是几年前发表的了。之后google又发表的一些诸如Pregel,Dremel,Percolator,MegaStore,则相对小众一些,所以就未纳入。正是google发表GFS,MapReduce,BigTable,Chubby,Sawzall这些论文之后,才衍生出Hadoop这样的一个海量数据处理的生态系统,形成了与之对应的诸如HDFS,Hadoop MapReduce,Hbase,Zookeeper,Pig,Hive这样的一些系统。要理解这样的一些系统,也还是要从google最原始的论文开始作为起点。

最后呢,其实我们可以看到在这些论文发表之后,一方面google本身的系统在不断演化,另一方面,开源实现与原始论文相较具体实现也有所不同,同时当开源软件应用到不同公司之后,这些公司本身会发展出适应自身应用的版本。具体来说:比如google的GFS在历经10多年的发展之后,与原始论文相比已发生了很多变化;再比如Hadoop已提出MapReduce 2,致力于更高的可用性、扩展性及通用性;Facebook对Hadoop针对自身应用特点进行了各种改进,主要是针对其实时性应用的特点,增加可用性及降低延迟。所以在这些论文的最后,又附上了一个ACM针对GFS的起源及演化,对google的Sean Quinlan所做的一次访谈。这个访谈已发表在ACM Queue上,对于理解一个系统是如何在漫长的时间内不断修正最初的设计、满足各种需求,如何一步步地演化是十分有益的。

由于时间能力及经验的限制,这些内容难免有偏颇及错误之处,欢迎指出其中的不当之处。同时为方便对比英文版阅读,在文章最后附上了对应的英文原版论文。最后,为组成一个完整的海量数据的存储计算和查询模型,又加上了关于Sawzall(对崮山路上走9遍翻译的版本做了一些修正及补充)及SMAQ的文章。

作者:phylips@bmy