简介

谷歌在2003到2006年间发表了三篇论文,《MapReduce: Simplified Data Processing on Large Clusters》,《Bigtable: A Distributed Storage System for Structured Data》和《The Google File System》介绍了Google如何对大规模数据进行存储和分析。这三篇论文开启了工业界的大数据时代。本文简单谈谈自己对于这几篇论文的理解。

背景

本质是由于在21世纪的数据巨量增加,Google的单机或简单的分布式方案满足不了用户需求,所以出现的新的数据处理方案,其产物就是GFS(Google File System)。但GFS只负责文件的存储而不能提供数据库服务(基于内容的检索功能),所以进而Google开发了Bigtable作为数据库,向上层服务提供基于内容的各种功能。他们还开发了对于的数据处理工具MapReduce,在读取了Bigtable数据的技术上,根据业务需求,对数据内容进行运算。

GFS

前置概念-分布式储存


题外:GFS论文一定程度催生了HDFS

文件系统

文件系统是负责管理和存储文件的系统软件,它是操作系统和硬件驱动之间的桥梁,操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件。

什么是分布式文件系统

分布式文件系统(Distributed File System)是一种允许文件通过网络在多台主机上共享的文件系统,可以让多机器上的多用户进行文件分享和存储。 在这样的文件系统中,客户端并非直接访问底层的数据存储区块,而是通过网络,以特定的通信协议和服务器沟通

什么是分布式存储

通过网络使用企业中的每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在企业的各个角落。

分布式储存的特点

  1. 可扩展:分布式存储系统可以扩展到数百甚至数千个这样的集群大小,并且系统的整体性能可以线性增长。
  2. 高可用性:在分布式文件系统中,高可用性包含两层,一是整个文件系统的可用性,二是数据的完整和一致性
  3. 低成本:分布式存储系统的自动容错和自动负载平衡允许在成本较低服务器上构建分布式存储系统。此外,线性可扩展性还能够增加和降低服务器的成本。
  4. 弹性存储: 可以根据业务需要灵活地增加或缩减数据存储以及增删存储池中的资源,而不需要中断系统运行

系统参考

设计概述

设计预期

  1. 由于使用的机器是廉价的商业化机器,那么机器崩溃被认为是一种常态。
  2. 系统存储以大文件为主,但也支持小文件。文件大小通常在100MB左右并且需要高效的操作几个GB的文件。
  3. 系统需要支持大规模的连续读取和小规模的随机读取,以及大规模的追加写。
  4. 高性能稳定的网络带宽比延迟更重要。
  5. 以及最重要的,能在分布式的系统上运行。

分布式文件系统GFS

GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。**它运行于廉价的普通硬件上,通过软件的方式自动容错,它将服务器故障视为正常现象,通过软件的方式自动容错,在保证系统可靠性和可用性的同时,大大降低系统的成本。**另一方面,它拥有着数据完整性,用于大型的、分布式的、对大量数据进行访问的应用。它又有着有效的诊断工具,广泛而细致的诊断日志以微小的代价换取了在问题隔离、诊断、性能分析方面起到了重大的作用。GFS服务器用日志来记录显著的事件,如服务器停机和启动和远程的应答。远程日志记录机器之间的请求和应答,通过收集不同机器上的日志记录,对它们进行分析恢复,就可以完整地重现活动的场景,并用此来进行错误分析。这些都给用户提供了总体性能较高的服务,比较方便快捷。从根本上说:文件被分割成很多块,使用冗余的方式储存于商用机器集群上。

架构

GFS chunkserver

在GFS chunkserver中,文件都是分成固定大小的chunk来存储的,每个chunk通过全局唯一的64位的chunk handle来标识,chunk handle在chunk创建的时候由GFS master分配。GFS chunkserver把文件存储在本地磁盘中,读或写的时候需要指定文件名和字节范围,然后定位到对应的chunk。为了保证数据的可靠性,一个chunk一般会在多台GFS chunkserver上存储,默认为3份,但用户也可以根据自己的需要修改这个值。

GFS master

GFS master管理所有的元数据信息,包括namespaces,访问控制信息,文件到chunk的映射信息,以及chunk的地址信息(即chunk存放在哪台GFS chunkserver上)。

GFS client

GFS client是GFS应用端使用的API接口,client和GFS master交互来获取元数据信息,但是所有和数据相关的信息都是直接和GFS chunkserver来交互的

Application

Application为使用gfs的应用,应用通过GFS client于gfs后端(GFS master和GFS chunkserver)打交道。

具体流程:

  1. 应用调用GFS Client的函数,要求其读取具体的文件/foo/bar,假设大小为50MB。
  2. GFS Client根据Chunk的固定大小计算出/foo/bar的Chunk的Index,即64/50向上取整,Chunk Index=1。以及其在Chunk内的偏移量Byte Range[0,50],并将File Name和Chunk Index作为参数发送给GFS Master
  3. Master返回了对应的Chunk Handle(也就是Chunk的ID,上图中的2ef0)和Chunk Locations(Chunk Server和其副本的IP)
  4. GFS Client根据返回的Chunk Locations找到最近的Chunk Server,然后根据Chunk Handle找到对应的Chunk,最后按照这个文件在Chunk中偏移量Byte Range读取文件。
  5. Chunk Server按照其要求返回文件数据。

系统交互

最小化所有操作和Master节点的交互

lease

写入操作流程图

snapshot

定义

关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照可以是其所表示的数据的一个副本(duplicate),也可以是数据的一个复制品(replicate)。

论文原文引用:

快照操作几乎可以瞬间完成对一个文件或者目录树(“源”)做一个拷贝,并且几乎不会对正在进行的其它操作造成任何干扰。我们的用户可以使用快照迅速的创建一个巨大的数据集的分支拷贝(而且经常是递归的拷贝拷贝),或者是在做实验性的数据操作之前,使用快照操作备份当前状态,这样之后就可以轻松的提交或者回滚到备份时的状态。

个人理解:快照可以在一个副本损坏时,从Primary Replica或者其他副本复制数据,然后用新的节点代替损坏的节点。

快照与备份

快照是数据存储的某一时刻的状态记录;备份则是数据存储的某一个时刻的副本。这是两种完全不同的概念。

[关于快照:](快照与备份有什么区别?快照是备份的其中一种么?还是两种不同的概念? - 木头龙的回答 - 知乎 https://www.zhihu.com/question/20374919/answer/499376887)

Map Reduce(略)

分布式处理模型MapReduce

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

对于TFS

将大数据由集中式计算过渡到分布式计算,以前提升算力的思路是让服务器越来越强,而分布式只需要增加服务器节点的数量,就能处理更大的数据量。

Bigtable(略)

分布式结构化表Bigtable

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

总结

说到此,另两个产品Map Reduce和Big Table,它们则是基于GFS研发的。这三大基础核心技术构建出了完整的分布式运算架构。像Map Reduce,它是一种编程模型,用于大规模数据集的并行运算。Map(映射)和Reduce(归约),是它们的主要思想概念,这是从函数式编程语言借鉴的,并且还有矢量编程语言里的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将其程序运行在分布式系统上。 目前软件实现是指定一个Map函数,把一组键值对映射成一组新的键值对,指定并发的Reduce函数,用来保证所有映射的键值对中的每一个共享相同的键组。而Big Table则是分布式数据存储系统,用来处理海量的数据的一种非关系型的数据库。Bigtable是非关系型数据库,是一个稀疏的、分布式的和持久化存储的多维度排序Map。它适用于廉价设备,适合大规模海量数据以及分布式、并发数据处理,易于扩展,效率极高,支持动态伸缩。

参考

Above the Clouds: A Berkeley View of Cloud
Computing

浅读Google三大论文相关推荐

  1. google三大论文

    Google三大论文之一:BigTable Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据.Google的很多项目使用Bigt ...

  2. Google三大论文之GFS

    Google 三大论文分别为:<Google File System>.<Google Bigtable>和<Google MapReduce>.这三大论文为大数据 ...

  3. Google三大论文读后感

    Google三大论文读后感 大数据这个词,很难对此进行明确的定义.通俗的来说,他就是我们身边的一切,眼睛所看到的,耳朵所听到的,鼻子闻到的,感觉器官所感觉到的以及一切能够描述出的信息.具体一点,我们在 ...

  4. Google 三大论文之——MapReduce

    MapReduce:超大机群上的简单数据处理 摘要 MapReduce是一个编程模型,和处理,产生大数据集的相关实现.用户指定一个map函数处理一个key/value对,从而产生中间的key/valu ...

  5. google三大论文之--MapReduce:超大机群上的简单数据处理

    MapReduce:超大机群上的简单数据处理                                              摘要 MapReduce是一个编程模型,和处理,产生大数据集的相 ...

  6. Google三大论文之 - GFS

    摘要 我们设计并实现了 Google GFS 文件系统,一个面向大规模数据密集型应用的.可伸缩的分布式文件系统. GFS 虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提 ...

  7. Google三大论文之 - BigTable

    1 摘要 Bigtable 是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的 PB 级的数据. Google 的很多项目使用 Bigtable 存储数据,包 ...

  8. 现行大数据框架技术思想鼻祖--不得不看的Google三大论文(英文原文)

    GFS:http://download.csdn.net/detail/myaoyou/9688736 MapReduce:http://download.csdn.net/detail/myaoyo ...

  9. google大数据三大论文-中文版-英文版

    Google-Bigtable中文版 下载地址: http://pan.baidu.com/s/1eQxmrVc Google-MapReduce中文版_1.0 下载地址: http://pan.ba ...

最新文章

  1. mongodb 学习笔记 2 --- 修改器
  2. 2018,人工智能在清算中落地
  3. Codeforces 264B Good Sequences ★ (分解素因子+DP)
  4. [洛谷P2124] 奶牛美容
  5. 使用带有注释和JQuery的Spring MVC 3的Ajax
  6. leetcode数组汇总_LeetCode刷题实战43:字符串相乘
  7. Kettle 学习导航帖整理
  8. Java中的数组和List
  9. python打乱数据集_在Keras中利用np.random.shuffle()打乱数据集实例
  10. 谷歌翻译API, 免费采集翻译
  11. 构建Lua解释器Part3:String设计与实现
  12. 知识分享!什么是中继器?-道合顺大数据Infinigo
  13. oracle资产负债表重分类吗,​资产负债表一般是重分类还是不重分类
  14. [附源码]计算机毕业设计JAVA校园超市进销存管理系统
  15. JVM成神之路-Java垃圾回收
  16. cocos2d-x传智播客_Hanselminutes播客167-与Jeremy Miller进行的配置约定
  17. ORB+GMS、FREAK+GMS、BRISK+GMS、AKAZE+GMS特征点结合使用方法
  18. 揭秘交换机市场内幕,“准工业级”猫腻你中招了吗?
  19. 深信服虚拟服务器断断续续的,深信服防火墙AF做双机时虚拟MAC问题的处理办法...
  20. C++:操作PDFlib库实例(附完整源码)

热门文章

  1. 高速边坡安全监测解决方案
  2. vue引入cesium
  3. 带你了解什么是元宇宙
  4. 数字信号处理实践方法 第二版 笔记
  5. 华为matebook护眼模式失效的解决办法
  6. 关于金融风险数据的ETL到分析
  7. linux+arm视频
  8. 教育城域网内网测速方法
  9. html如何图片立体自动旋转,css3如何让图片不停旋转?
  10. java awt 仿360 进度_Android 控件进阶修炼-仿360手机卫士波浪球进度控件