码迷,mamicode.com
首页 > 其他好文 > 详细

GFS简要学习

时间:2014-12-04 22:51:13      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   os   sp   on   文件   数据   

  GFS是Google提出的分布式文件系统,它由一个单一的master服务器以及多个chunk文件服务器组成,master服务器主要对命名空间、文件和chunk的映射以及chunk所在服务器的位置进行管理(包括文件的锁管理),chunk服务器主要存储chunk文件,单个chunk文件最大为64M,以文件的形式保存。

  下面问题来了,对于一个文件系统,主要关心的问题是文件如何写入和读取,对于一个分布式文件系统,我们还要关心系统的可靠性以及一致性,对于GFS的学习,本人也从回答上述问题入手。

  1、文件读取

  GFS分布式系统中,一个文件被划分为多个chunk文件,被存储在多个Chunk服务器中,如果要读取某一个文件,客户端程序先在master服务器中找到该文件的chunk映射关系以及chunk的位置,然后,根据chunk的顺序,直接从Chunk服务器中读取数据。其流程图如下:

bubuko.com,布布扣

  由图中可以看出,数据的读取是由客户端程序直接与Chunk服务器进行交互,因此,对于master节点,并没有太大的流量压力。

  2、数据的写入

  GFS中没有对文件编辑的概念,数据的写入方式也是追加写入,根据论文中的观点,追加写入的方式可以容易使得主备chunk上的数据保持一致性,当chunk文件被追加写入成功后,chunk的版本会被提升,如果某一个chunk的副本数据追加失败,chunk的版本由master节点负责维护和更新。

  在对chunk进行追加写入操作时,master会从相同数据的不同chunk文件中选举出一个主chunk文件,由主chunk来负责执行数据追加的顺序,先来看一张数据写入的流程图:

bubuko.com,布布扣

  这个图中看出,整个GFS系统中数据的流动分为两种,一种是数据流,还有一种是控制流,当客户端往chunk中写数据时,只向一种的一个chunk发送一次数据,不同chunk之间内部进行数据的同步。具体的写入流程如下:

  (1)客户端向master节点请求chunk的位置信息

  (2)master节点返回给客户端所有的chunk文件的位置信息

  (3)客户端向其中的一个chunk服务器发送数据

  (4)当所有的chunk服务器接收到客户端的请求后,客户端请求主chunk写入数据,主chunk确定写入数据的顺序,并将数据写入到本地。

  (5)主chunk通知所有的副chunk按照顺序写入数据

  (6)副本完成写入后通知主chunk。

  (7)主chunk通知客户端数据写入成功或者失败。

  3、GFS文件系统的可靠性

  (1)master节点的可靠性:在GFS文件系统中,master节点的可靠性由日志操作保证,同时,为了减小日志文件的大小,master服务器会定期对日志文件进行一个压缩,形成checkpoint,master节点中数据的恢复只需要checkpoint及其之后的日志操作即可。在GFS文件系统中,还有一个shadow master的存在,当然,在master节点以及shadow master之间会存在一个日志的同步问题。

  (2)chunk冗余:每个chunk文件会有额外的两个备份chunk文件,防止其中的某个chunk文件追加失败或者chunk 服务器宕机而造成数据的丢失。按照HDFS中的分配分配方法,另外两个chunk文件,一个备份在相同的Chunk服务器上,还有一个在其他的chunk服务器上。

  

GFS简要学习

标签:style   blog   http   ar   os   sp   on   文件   数据   

原文地址:http://www.cnblogs.com/byheart/p/4143208.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!