第一篇:Google File System

论文地址
本论文设计并实现了 Google GFS 文件系统,一个面向大规模数据密集型应用的、可伸缩的分布式文件系统。
GFS 与传统的分布式文件系统有着很多相同的设计目标,比如,性能、可伸缩性、可靠性以及可用性。

<mark>思路与实现</mark>
1.根据当前的和可预期的将来的应用规模和技术环境来评估传统的文件系统的特性。将他们引导到一个使用完全不同于传统的设计思路上。
2.根据设计思路,认为组件失效是常态而不是异常,针对采用追加方式(有可能是并发追加)写入、然后再读取(通常序列化读取)的大文件进行优化,以及扩展标准文件系统接口、放松接口限制来改进整个系统。
3.系统通过持续监控,复制关键数据,快速和自动恢复提供灾难冗余。Chunk 复制使得我们可以对Chunk 服务器的失效进行容错。高频率的组件失效要求系统具备在线修复机制,能够周期性的、透明的修复损坏的数据,也能够第一时间重新建立丢失的副本。此外,他们使用 Checksum 在磁盘或者 IDE 子系统级别检测数据损坏,在这样磁盘数量惊人的大系统中,损坏率是相当高的。
4.他们的设计保证了在有大量的并发读写操作时能够提供很高的合计吞吐量。通过分离控制流和数据流来实现这个目标,控制流在 Master 服务器处理,而数据流在 Chunk 服务器和客户端处理。当一般的操作涉及到 Master 服务器时,由于 GFS 选择的 Chunk 尺寸较大(alex 注:从而减小了元数据的大小),以及通过 ChunkLease 将控制权限移交给主副本,这些措施将 Master 服务器的负担降到最低。这使得一个简单、中心的 Master不会成为成为瓶颈。我们相信我们对网络协议栈的优化可以提升当前对于每客户端的写入吞吐量限制。
<mark>总结</mark>
GFS 成功的实现了对存储的需求,在 Google 内部,无论是作为研究和开发的存储平台,还是作为生产系统的数据处理平台,都得到了广泛的应用。它是持续创新和处理整个 WEB 范围内的难题的一个重要工具。

第二篇:Google Bigtable

论文地址
本论文描述了 Bigtable 提供的简单的数据模型。利用这个模型,用户可以动态的控制数据的分布和格式。
在很多方面,<mark>Bigtable 和数据库很类似</mark>:它使用了很多数据库的实现策略。并行数据库和内存数据库已经具备可扩展性高性能,但是 Bigtable 提供了一个和这些系统完全不同的接口。Bigtable 不支持完整的关系数据模型;与之相反,Bigtable 为客户提供了简单的数据模型,利用这个模型,客户可以动态控制数据的分布和格式,用户也可以自己推测底层存储数据的位置相关性。数据的下标是行和列的名字,名字可以是任意的字符串。Bigtable 将存储的数据都视为字符串,但是 Bigtable 本身不去解析这些字符串,客户程序通常会在把各种结构化或者半结构化的数据串行化到这些字符串里。通过仔细选择数据的模式,客户可以控制数据的位置相关性。最后,可以通过 BigTable 的模式参数来控制数据是存放在内存中、还是硬盘上。
Boxwood项目的有些组件在某些方面和 Chubby、GFS 以及 Bigtable 类似,因为它也提供了诸如分布式协议、锁、分布式 Chunk 存储以及分布式 B-tree 存储。Boxwood 与 Google 的某些组件尽管功能类似,但是Boxwood 的组件提供更底层的服务。Boxwood 项目的目的是提供创建类似文件系统、数据库等高级服务的基础构件,而 Bigtable 的目的是直接为客户程序的数据存储需求提供支持。
现在有不少项目已经攻克了很多难题,实现了在广域网上的分布式数据存储或者高级服务,通常是==“Internet 规模”==的。这其中包括了分布式的 Hash 表,这项工作由一些类似 CAN、Chord、Tapestry和 Pastry的项目率先发起。这些系统的主要关注点和 Bigtable 不同,比如应对各种不同的传输带宽、不可信的协作者、频繁的更改配置等;另外,去中心化和 Byzantine 灾难冗余34也不是 Bigtable 的目的。就提供给应用程序开发者的分布式数据存储模型而言,我们相信,分布式 B-Tree 或者分布式 Hash 表提供的 Key-value pair 方式的模型有很大的局限性。Key-value pair 模型是很有用的组件,但是它们不应该是提供给开发者唯一的组件。我们选择的模型提供的组件比简单的 Key-value pair 丰富的多,它支持稀疏的、半结构化的数据。另外,它也足够简单,能够高效的处理平面文件;它也是透明的(通过局部性群组),允许我们的使用者对系统的重要行为进行调整。
有些数据库厂商已经开发出了并行的数据库系统,能够存储海量的数据Oracle 的 RAC使用共享磁盘存储数据(Bigtable 使用 GFS),并且有一个分布式的锁管理系统(Bigtable 使用 Chubby)。IBM 并行版本的 DB2基于一种类似于 Bigtable 的、不共享任何东西的架构。每个 DB2 的服务器都负责处理存储在一个关系型数据库中的表中的行的一个子集。这些产品都提供了一个带有事务功能的完整的关系模型。

第三篇:Google MapReduce

论文地址
MapReduce 架构的程序能够在大量的普通配置的计算机上实现并行化处理。这个系统在运行时只关心:如何分割输入数据,在大量计算机组成的集群上的调度,集群中计算机的错误处理,管理集群中计算机之间
必要的通信
。采用 MapReduce 架构可以使那些没有并行计算和分布式处理系统开发经验的程序员有效利用分布式系统的丰富资源。
MapReduce 的实现依赖于一个内部的集群管理系统,这个集群管理系统负责在一个超大的、共享机器的集群上分布和运行用户任务。
MapReduce 库的排序机制和 NOW-Sort的操作上很类似。读取输入源的机器(map workers)把待排序的数据进行分区后,发送到 R 个 Reduce worker 中的一个进行处理。每个 Reduce worker 在本地对数据进行排序(尽可能在内存中排序)。当然,NOW-Sort 没有给用户自定义的 Map 和 Reduce 函数的机会,因此不具备MapReduce 库广泛的实用性。
<mark>总结</mark>
MapReduce 封装了并行处理、容错处理、数据本地化优化、负载均衡等等技术难点的细节,这使得 MapReduce库易于使用。即便对于完全没有并行或者分布式系统开发经验的程序员而言;其次,大量不同类型的问题都
可以通过 MapReduce 简单的解决。比如,MapReduce 用于生成 Google 的网络搜索服务所需要的数据、用来排序、用来数据挖掘、用于机器学习,以及很多其它的系统;第三,我们实现了一个在数千台计算机组成的大型集群上灵活部署运行的 MapReduce。这个实现使得有效利用这些丰富的计算资源变得非常简单,因此也适合用来解决 Google 遇到的其他很多需要大量计算的问题。

三篇论文看完后的想法

对于小白而言:看!不!懂!
因此,以上是我根据论文整理了他们实现的主要思路。(简单的来说就是copy>_< !)
因为对大数据的问题了解的不够深刻,因此在论文问题研究上理解上有很大的困难。
但是,通过看这三篇论文,在思想上有一定的提升。对于大量数据的处理、传输、储存,以及在处理过程遇到的难题解决思路,论文写的都非常清楚。
继续加油啃吧!