声明:此文转载自博客开发团队的博客,尊重原创工作。该文适合学分布式系统之前,作为背景介绍来读。

  谈到分布式系统,就不得不提Google的三驾马车:Google FS[1],MapReduce[2],Bigtable[3]。

  虽然Google没有公布这三个产品的源码,但是他发布了这三个产品的详细设计论文。而且,Yahoo资助的Hadoop也有按照这三篇论文的开源Java实现:Hadoop对应MapReduce, Hadoop Distributed File System (HDFS)对应Google FS,Hbase对应Bigtable。不过在性能上Hadoop比Google要差很多,参见表1。

  表1:Hbase和BigTable性能比较(来源于http://wiki.apache.org/lucene-hadoop/Hbase/PerformanceEvaluation)

Experiment

HBase20070916

BigTable

random reads

272

1212

random reads (mem)

Not implemented

10811

random writes

1460

8850

sequential reads

267

4425

sequential writes

1278

8547

Scans

3692

15385

  以下分别介绍这三个产品:

1. Google FS

  GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,提供容错功能。

  

  图1 GFS Architecture

  (1)GFS的结构

  1. GFS的结构图见图1,由一个master和大量的chunkserver构成,

  2. 不像Amazon Dynamo的没有主的设计,Google设置一个主来保存目录和索引信息,这是为了简化系统结果,提高性能来考虑的,但是这就会造成主成为单点故障或者瓶颈。为了消除主的单点故障Google把每个chunk设置的很大(64M),这样,由于代码访问数据的本地性,application端和master的交互会减少,而主要数据流量都是Application和chunkserver之间的访问。

  3. 另外,master所有信息都存储在内存里,启动时信息从chunkserver中获取。提高了master的性能和吞吐量,也有利于master当掉后,很容易把后备j机器切换成master。

  4. 客户端和chunkserver都不对文件数据单独做缓存,只是用linux文件系统自己的缓存

  “The master stores three major types of metadata: the file and chunk namespaces, the mapping from files to chunks, and the locations of each chunk’s replicas.”

  “Having a single master vastly simplifies our design and enables the master to make sophisticated chunk placement and replication decisions using global knowledge. However,we must minimize its involvement in reads and writes so that it does not become a bottleneck. Clients never read and write file data through the master. Instead, a client asks the master which chunkservers it should contact. It caches this information for a limited time and interacts with the chunkservers directly for many subsequent operations.”

  “Neither the client nor the chunkserver caches file data.Client caches offer little benefit because most applications stream through huge files or have working sets too large to be cached. Not having them simplifies the client and the overall system by eliminating cache coherence issues.(Clients do cache metadata, however.) Chunkservers need not cache file data because chunks are stored as local files and so Linux’s buffer cache already keeps frequently accessed data in memory.”

  (2)GFS的复制

  GFS典型的复制到3台机器上,参看图2

  图2 一次写操作的控制流和数据流

  (3) 对外的接口

  和文件系统类似,GFS对外提供create, delete,open, close, read, 和 write 操作。另外,GFS还新增了两个接口snapshot and record append,snapshot。有关snapshot的解释:

  “Moreover, GFS has snapshot and record append operations. Snapshot creates a copy of a file or a directory tree at low cost.

Record append allows multiple clients to append data to the same file concurrently while guaranteeing the atomicity of each individual client’s append.”

2. MapReduce

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

  讲到并行计算,就不能不谈到微软的Herb Sutter在2005年发表的文章” The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software”[6],主要意思是通过提高cpu主频的方式来提高程序的性能很快就要过去了,cpu的设计方向也主要是多核,超线程等并发上。但是以前的程序并不能自动的得到多核的好处,只有编写并发程序,才能真正获得多核的好处。分布式计算也是一样。

  

  图3 MapReduce Execution overview

  1)MapReduce是由Map和reduce组成,来自于Lisp,Map是影射,把指令分发到多个worker上去,Reduce是规约,把Map的worker计算出来的结果合并。(参见图3)

  2)Google的MapReduce实现使用GFS存储数据。

  3)MapReduce可用于Distributed Grep,Count of URL Access Frequency,ReverseWeb-Link Graph,Distributed Sort,Inverted Index

3. Bigtable

  就像文件系统需要数据库来存储结构化数据一样,GFS也需要Bigtable来存储结构化数据。

  1)BigTable 是建立在 GFS ,Scheduler ,Lock Service 和 MapReduce 之上的。

  2)每个Table都是一个多维的稀疏图

  3)为了管理巨大的Table,把Table根据行分割,这些分割后的数据统称为:Tablets。每个Tablets大概有 100-200 MB,每个机器存储100个左右的 Tablets。底层的架构是:GFS。由于GFS是一种分布式的文件系统,采用Tablets的机制后,可以获得很好的负载均衡。比如:可以把经常响应的表移动到其他空闲机器上,然后快速重建。

参考文献

  [1]The Google File System; http://labs.google.com/papers/gfs-sosp2003.pdf

  [2]MapReduce: Simplifed Data Processing on Large Clusters; http://labs.google.com/papers/mapreduce-osdi04.pdf

  [3]Bigtable: A Distributed Storage System for Structured Data;http://labs.google.com/papers/bigtable-osdi06.pdf

  [4]Hadoop ; http://lucene.apache.org/hadoop/

  [5]Hbase: Bigtable-like structured storage for Hadoop HDFS;http://wiki.apache.org/lucene-hadoop/Hbase

  [6]The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software;http://www.gotw.ca/publications/concurrency-ddj.htm

转载于:https://www.cnblogs.com/maybe2030/p/4568541.html

[MapReduce] Google三驾马车:GFS、MapReduce和Bigtable相关推荐

  1. Google分布式系统三驾马车: GFS,mapreduce,Bigtable

    谈到分布式系统,就不得不提Google的三驾马车:Google fs[1],Mapreduce[2],Bigtable[3]. 虽然Google没有公布这三个产品的源码,但是他发布了这三个产品的详细设 ...

  2. Google三驾马车之MapReduce

    谷歌在2003到2006年间发表了三篇论文,<MapReduce: Simplified Data Processing on Large Clusters>,<Bigtable: ...

  3. Google三驾马车之Bigtable

    谷歌在2003到2006年间发表了三篇论文,<MapReduce: Simplified Data Processing on Large Clusters>,<Bigtable: ...

  4. 一文带你系统梳理Google三驾马车

    一文带你系统梳理Google三驾马车 不知道大家在工作中,有没有遇到过这类程序员:他们无论在什么岗位,开发什么系统,好像都能够抓到问题的本质,做得「游刃有余」. 我也经常碰到这类程序员,每次我向他们请 ...

  5. Google三驾马车:GFS、MapReduce和Bigtable

    谈到分布式系统,就不得不提Google的三驾马车:Google fs[1],Mapreduce[2],Bigtable[3]. 虽然Google没有公布这三个产品的源码,但是他发布了这三个产品的详细设 ...

  6. Google三驾马车之GFS

    谷歌在2003到2006年间发表了三篇论文,<MapReduce: Simplified Data Processing on Large Clusters>,<Bigtable: ...

  7. google三驾马车

    三驾马车已经是上个时代的东西了,谷歌三驾马车都已经各自完成了升级. 1.GFS的升级是Colossus https://cloud.google.com/files/s ... _and_challe ...

  8. 【Google三驾马车系列】MapReduce原理总结

    MapReduce基本框架 MapReduce计算模型的两个重要阶段: Map:映射,将数据转化为键值对的形式.切片操作在集群中并发执行,切片大小默认取最大切片.最小切片.块大小(128M)中间值. ...

  9. 【Google三驾马车系列】GFS原理总结

    这里写自定义目录标题 GFS基本框架 容错机制 Master 的容错机制 :操作日志 + Checkpoint + ShadowMaster ChunkServer的容错机制:复制多个副本 + che ...

最新文章

  1. python中time模块常用功能
  2. python 回文数
  3. 程序员的七种必备武器
  4. ion-nav-view的学习 和理解
  5. JavaOne 2015 –第二十版十大收获
  6. 1079. Total Sales of Supply Chain (25)
  7. window服务器开站点(不通用)
  8. 动态规划:树形DP-景点中心(树的带权重心)
  9. Dev Lake 0.4.0 版本:开源、开放的研发效能数据平台
  10. 移动端上下拖动调整顺序效果_移动端上下滑动事件之--坑爹的touch.js
  11. Python之数据分析(Numpy的数组切片、数组变维、组合与拆分)
  12. 提高无线网络下载速度的秘诀
  13. python输出excel能够识别的utf-8格式csv文件
  14. Android ADB命令?这一次我再也不死记了!【简单说】
  15. WPE 过滤器 高级滤镜
  16. 51单片机采用ADC0808检测ADC_LCD1602显示
  17. 测试版降级后软件还在么,2分钟告诉你如何将iOS测试版降级到正式版本
  18. ORL Character Recgnition
  19. 机械手的分类有哪几种?
  20. stata输出相关系数表到word

热门文章

  1. Scott Mitchell 的ASP.NET 2.0数据教程之三十九:: 在编辑和插入界面里添加验证控件...
  2. superset可视化-Pie Chart(圆饼图)
  3. cannot find or load main class org.apache.flink.api.scala.FlinkShell
  4. org.apache.hadoop.hive.metastore.api.InvalidObjectException: Role public already exists.
  5. scala中_+_的意思
  6. 清理c盘垃圾的cmd命令_用命令删除系统垃圾,这波操作深藏功与名
  7. 视图解析器中配置前缀和后缀---SpringMVC学习笔记(五)
  8. mybatis框架总体说明---Mybatis学习笔记(二)
  9. 非对称加密算法---加密学习笔记(四)
  10. maven的安装、路径配置、修改库文件路径和eclipse中的配置、创建maven工程(转)...