Google大数据三大论文

简介:http://www.javashuo.com/article/p-qhgonhpe-hk.html算法

论文中英文版下载http://pan.baidu.com/s/1slUy4sl数据库

 

 经典论文翻译导读之《Google File System》GFS(2003)

https://blog.csdn.net/qq_38122518/article/details/78201472编程

2003年,Google发布Google File System论文,这是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,提供容错功能。从根本上说:文件被分割成不少块,使用冗余的方式储存于商用机器集群上。数组

主要设计理念:缓存

0、愿景:服务器

  给用户一个无限容量、放心使用的硬盘,快速的存取文件。markdown

一、架构为 client + master + chunkserver网络

        master为单点大脑,负担小,持久化一些重要的不常变的元数据,易变元数据启动后从chunkserver拉取,存在内存里。数据结构

  chunkserver为集群,架构

  chunk为文件存储单位,最大大小可配置但配后固定,尽量配大些,这样chunk个数少,master上须要维护的元数据少。

  chunk存在多份副本,位于不一样的chunkserver上,分首要副本和普通副本。

  数据流和控制流解耦,客户端先发数据到全部副本上(有些传输发生在副本间),全部副本把数据准备好,并无实施变异。而后发执行命令到首要副本,而后根据严格的次序,在各个副本上实施变异。

  client先经过master获取元数据,并缓存。而后对文件的操做都是直接与chunkserver交互。

二、设计原则:

  chunk副本的布置策略主要遵循两个目标:最大化数据可靠性和可用性,最大化网络带宽利用。

  高可用性:咱们保持总体系统高度可用,只用两个简单可是高效的策略:快速恢复和复制。master和chunkserver均可以在几秒内重启并恢复它们的状态。

  数据完整性:每一个chunkserver使用checksum来侦测腐化的存储数据。可是每一个chunkserver本身校验,不是chunkserver之间校验。校验出问题后,从其余副本拷贝

三、当一个文件被应用删除时,master马上打印删除操做的日志,然而不会马上回收资源,仅仅将文件重命名为一个隐藏的名字,包含删除时间戳。在master对文件系统命名空间执行常规扫描时,它会删除任何超过3天的隐藏文件(周期可配)。

 

 

MapReduce(2004):面向大型集群的简化数据处理

 https://blog.csdn.net/qq_38122518/article/details/78205655

紧随其后的就是2004年公布的 MapReduce论文,论文描述了大数据的分布式计算方式,主要思想是将任务分解而后在多台处理能力较弱的计算节点中同时处理,而后将结果合并从而完成大数据处理。

Mapreduce是针对分布式并行计算的一套编程模型。

 与以前理解的差别:

一、Map不是分块函数,而是分块处理函数。分块函数没名字

二、原始的MapReduce是经过文件传输数据的,包括中间数据也是由Map写到文件里,再由Reduce来获取的。

三、在每一个工做节点上,能够先进行一次结果处理,也就是Recuce处理,以减小最终Reduce的压力,以及网络传输压力。

 

BigTable(2006)

 Bigtable发布于2006年,启发了无数的NoSQL数据库,好比:Cassandra、HBase等等。Cassandra架构中有一半是模仿Bigtable,包括了数据模型、SSTables以及提早写日志(另外一半是模仿Amazon的Dynamo数据库,使用点对点集群模式)。

 Bigtable 是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:一般是分布在数千台普通服务器上的 PB 级的数据。

BigTable 是创建在 GFS 和 MapReduce 之上的。每一个Table都是一个多维的稀疏图

Bigtable 是一个稀疏的、分布式的、持久化存储的多维度排序 Map5。 Map 的索引是行关键字、列关键字以及时间戳; Map 中的每一个 value 都是一个未经解析的 byte 数组。

Bigtable 经过行关键字的字典顺序来组织数据。表中的每一个行均可以动态分区。每一个分区叫作一个”Tablet”,Tablet 是数据分布和负载均衡调整的最小单位。这样作的结果是,当操做只读取行中不多几列的数据时效率很高,一般只须要不多几回机器间的通讯便可完成。用户能够经过选择合适的行关键字,在数据访问时有效利用数据的位置相关性,从而更好的利用这个特性。

列关键字组成的集合叫作“列族“,列族是访问控制的基本单位。存放在同一列族下的全部数据一般都属于同一个类型(咱们能够把同一个列族下的数据压缩在一块儿)。

Bigtable 支持单行上的事务处理,利用这个功能,用户能够对存储在一个行关键字下的数据进行原子性的读-更新-写操做。

 为了管理巨大的Table,把Table根据行分割,这些分割后的数据统称为:Tablets。每一个Tablets大概有 100-200 MB,每一个机器存储100个左右的 Tablets。底层的架构是:GFS。

 因为GFS是一种分布式的文件系统,采用Tablets的机制后,能够得到很好的负载均衡。好比:能够把常常响应的表移动到其余空闲机器上,而后快速重建。

 

Bigtable 是创建在其它的几个 Google 基础构件上的。 BigTable 使用 Google 的分布式文件系统(GFS) 【17】存储日志文件和数据文件。 BigTable 集群一般运行在一个共享的机器池中,池中的机器还会运行其它的各类各样的分布式应用程序,BigTable 的进程常常要和其它应用的进程共享机器。 BigTable 依赖集群管理系统来调度任务、管理共享的机器上的资源、处理机器的故障、以及监视机器的状态。

 

  BigTable 内部存储数据的文件是 Google SSTable 格式的。 SSTable 是一个持久化的、排序的、不可更改的 Map 结构,而 Map 是一个 key-value 映射的数据结构, key 和 value 的值都是任意的 Byte 串。能够对 SSTable 进行以下的操做:查询与一个 key 值相关的 value,或者遍历某个 key 值范围内的全部的 key-value 对。从内部看, SSTable 是一系列的数据块(一般每一个块的大小是 64KB,这个大小是能够配置的)。 SSTable 使用块索引(一般存储在 SSTable 的最后)来定位数据块;在打开 SSTable 的时候,索引被加载到内存。每次查找均可以经过一次磁盘搜索完成:首先使用二分查找法在内存中的索引里找到数据块的位置,而后再从硬盘读取相应的数据块。也能够选择把整个 SSTable 都放在内存中,这样就没必要访问硬盘了。

 

  BigTable 还依赖一个高可用的、序列化的分布式锁服务组件,叫作 Chubby【8】。一个 Chubby 服务包括了 5 个活动的副本,其中的一个副本被选为 Master,而且处理请求。只有在大多数副本都是正常运行的,而且彼此之间可以互相通讯的状况下, Chubby 服务才是可用的。当有副本失效的时候, Chubby 使用 Paxos 算法【9,23】来保证副本的一致性。 Chubby 提供了一个名字空间,里面包括了目录和小文件。每一个目录或者文件能够当成一个锁,读写文件的操做都是原子的。 Chubby 客户程序库提供对 Chubby 文件的一致性缓存。每一个Chubby 客户程序都维护一个与 Chubby 服务的会话。若是客户程序不能在租约到期的时间内从新签定会话的租约,这个会话就过时失效了9。当一个会话失效时,它拥有的锁和打开的文件句柄都失效了。 Chubby 客户程序能够在文件和目录上注册回调函数,当文件或目录改变、或者会话过时时,回调函数会通知客户程序。

 

Bigtable 包括了三个主要的组件:连接到客户程序中的库、一个 Master 服务器和多个 Tablet 服务器。针对系统工做负载的变化状况, BigTable 能够动态的向集群中添加(或者删除) Tablet 服务器。

 

  Master 服务器主要负责如下工做:为 Tablet 服务器分配 Tablets、检测新加入的或者过时失效的 Table 服务器、对 Tablet 服务器进行负载均衡、以及对保存在 GFS 上的文件进行垃圾收集。除此以外,它还处理对模式的相关修改操做,例如创建表和列族。

相关文章
相关标签/搜索