`
QING____
  • 浏览: 2232840 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

GFS学习(一)

 
阅读更多
Google文件系统GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,但可以提供容错功能。它可以给大量的用户提供总体性能较高的服务。

、设计概览

  1)设计想定:

  GFS与过去的分布式文件系统有很多相同的目标,但GFS的设计受到了当前及预期的应用方面的工作量及技术环境的驱动,这反映了 它与早期的文件系统明显不同的设想。这就需要对传统的选择进行重新检验并进行完全不同的设计观点的探索。

  GFS与以往的文件系统的不同的观点如下:

  1、"部件"错误不再被当作异常,而是将其作为常见的情况加以处理。因为文件系统由成百上千个用于存储的机器构成,而这些机器是由廉价的普通部件组成并被大量的客户机访问。部件的数量和质量使得一些机器随时都有可能无法工作并且有一部分还可能无法恢复。所以实时地监控、错误检测、容错、自动恢复对系统来说必不可少。

  2、按照传统的标准,文件都非常大。长度达几个GB的文件是很平常的。每个文件通常包含很多应用对象。当经常要处理快速增长的、包含数以万计的对象、长度达TB的数据集时,我们很难管理成千上万的KB规模的文件块,即使底层文件系统提供支持。因此,设计中操作的参数、块的大小必须要重新考虑。对大型的文件的管理一定要能做到高效,对小型的文件也必须支持,但不必优化。

  3、大部分文件的更新是通过添加新数据完成的,而不是改变已存在的数据。在一个文件中随机的操作在实践中几乎不存在。一旦写完,文件就只可读,很多数据都有这些特性。一些数据可能组成一个大仓库以供数据分析程序扫描。有些是运行中的程序连续产生的数据流。有些是档案性质的数据,有些是在某个机器上产生、在另外一个机器上处理的中间数据。由于这些对大型文件的访问方式,添加操作成为性能优化和原子性保证的焦点。而在客户机中缓存数据块则失去了吸引力。

  4、工作量主要由两种读操作构成:对大量数据的流方式的读操作和对少量数据的随机方式的读操作。在前一种读操作中,可能要读几百 KB,通常达1MB和更多。来自同一个客户的连续操作通常会读文件的一个连续的区域。随机的读操作通常在一个随机的偏移处读几个 KB。性能敏感的应用程序通常将对少量数据的读操作进行分类并进行批处理以使得读操作稳定地向前推进,而不要让它来来回回的读。

  5、工作量还包含许多对大量数据进行的、连续的、向文件添加数据的写操作。所写的数据的规模和读相似。一旦写完,文件很少改动。 在随机位置对少量数据的写操作也支持,但不必非常高效。

  6、系统必须高效地实现定义完好的大量客户同时向同一个文件的添加操作的语义。

  2)系统接口:

  GFS提供了一个相似地文件系统界面,虽然它没有向POSIX那样实现标准的API。文件在目录中按层次组织起来并由路径名标识

  3)体系结构:

  一个GFS集群由一个master和大量的chunkserver构成,并被许多客户(Client)访问。如图1所示。Masterchunkserver通常是运行用户层服务进程的Linux机器。只要资源和可靠性允许,chunkserverc lient可以运行在同一个机器上。



 

  文件被分成固定大小的块。每个块由一个不变的、全局唯一的64位的chunkhandle标识,chunkhandle是在块创建时由master分配的。ChunkServer将块当作Linux文件存储在本地磁盘并可以读和写由chunkhandle和位区间指定的数据。出于可靠性考虑,每一个块被复制到多个chunkserver上。默认情况下,保存3个副本,但这可 以由用户指定。

  Master维护文件系统所有的元数据(metadata),包括名字空间、访问控制信息、从文件到块的映射以及块的当前位置。它也控制系统范围的活动,如块租约(lease)管理,孤立块的垃圾收集,chunkserver间的块迁移。Master定期通过HeartBeat消息与每一个chunkserver通信,给chunkserver传递指令并收集它的状态。

  与每个应用相联的GFS客户代码实现了文件系统的API并与masterchunkserver通信以代表应用程序读和写数据 。客户与master的交换只限于对元数据(metadata)的操作,所有数据方面的通信都直接和chunkserver联系

  客户和chunkserver都不缓存文件数据。因为用户缓存的益处微乎其微,这是由于数据太多或工作集太大而无法缓存。不缓存数据简化了客户程序和整个系统,因为不必考虑缓存的一致性问题。但用户缓存元数据(metadata)。Chunkserver 也不必缓存文件,因为块时作为本地文件存储的。

  4)单master:

  只有一个master也极大的简化了设计并使得master可以根据全局情况作出块放置和复制的决定。但是我们必须要将master对读和写的参与减至最少,这样它才不会成为系统的瓶颈。Client从来不会从master中读和写文件数据。Clien t只是询问master它应该和哪个chunkserver联系。Client在一段限定的时间内将这些信息缓存,在后续的操作中Client直接和chunkserver交互。

  以图1解释一下一个简单的读操作的交互。

  1client使用固定的块大小将应用程序指定的文件名和字节偏移转换成文件的一个块索引(chunk index)。

  2、给master发送一个包含文件名和块索引的请求。

  3master回应对应的chunk handle和副本的位置(多个副本)。

  4client以文件名和块索引为键缓存这些信息。(handle和副本的位置)。

  5Client 向其中一个副本发送一个请求,很可能是最近的一个副本。请求指定了chunk handlechunkserverchunk handle标识chunk)和块内的一个字节区间。

  6、除非缓存的信息不再有效(cache for a limited time)或文件被重新打开,否则以后对同一个块的读操作不再需要clientmaster间的交互。

  通常Client可以在一个请求中询问多个chunk的地址,而master也可以很快回应这些请求。

  5)块规模:

  块规模是设计中的一个关键参数。我们选择的是64MB,这比一般的文件系统的块规模要大的多。每个块的副本作为一个普通的Linux文件存储,在需要的时候可以扩展。

  块规模较大的好处有:

  1、减少clientmaster之间的交互。因为读写同一个块只是要在开始时向master请求块位置信息。对于读写大型文 件这种减少尤为重要。即使对于访问少量数据的随机读操作也可以很方便的为一个规模达几个TB的工作集缓存块位置信息。

  2Client在一个给定的块上很可能执行多个操作,和一个chunkserver保持较长时间的TCP连接可以减少网络负载

  3、这减少了master上保存的元数据(metadata)的规模,从而使得可以将metadata放在内存中。这又会带来一 些别的好处。

  不利的一面:

  一个小文件可能只包含一个块,如果很多Client访问改文件的话,存储这些块的chunkserver将成为访问的热点。但在 实际应用中,应用程序通常顺序地读包含多个块的文件,所以这不是一个主要问题。

  6)元数据(metadata):

  master存储了三中类型的metadata:文件的名字空间和块的名字空间,从文件到块的映射,块的副本的位置。所有的me tadata都放在内存中。前两种类型的metadata通过向操作日志记录修改而保持不变,操作日志存储在master的本地磁盘并在几个远程机器上留有副本。使用日志使得我们可以很简单地、可靠地更新master的状态,即使在master崩溃的情况下也不会有不一致的问题。相反,mater在每次启动以及当有chuankserver加入的时候询问每个chunkserver的所拥有的块的情况。

  A、内存数据结构:

  因为metadata存储在内存中,所以master的操作很快。进一步,master可以轻易而且高效地定期在后台扫描它的整个状态。这种定期地扫描被用于实现块垃圾收集、chunkserver出现故障时的副本复制、为平衡负载和磁盘空间而进行的块迁移。

  这种方法的一个潜在的问题就是块的数量也即整个系统的容量是否受限与master的内存。实际上,这并不是一个严重的问题。Master为每个64MB的块维护的metadata不足64个字节。除了最后一块,文件所有的块都是满的。类似的,每个文件的名字空间数据也不足64个字节,因为文件名是以一种事先确定的压缩方式存储的.如果要支持更大的文件系统,那么增加一些内存的方法对于我们将元数据(metadata)保存在内存种所获得的简单性、可靠性、高性能和灵活性来说,这只是一个很小的代价。

  B、块位置:

  master并不为chunkserver所拥有的块的副本的保存一个不变的记录。它在启动时通过简单的查询来获得这些信息。Master可以保持这些信息的更新,因为它控制所有块的放置并通过Heart Beat消息来监控chunkserver的状态。

  这样做的好处:因为chunkserver可能加入或离开集群、改变路径名、崩溃、重启等,一个集群重有成百个server,这 些事件经常发生,这种方法就排除了masterchunkserver之间的同步问题。

  另一个原因是:只有chunkserver才能确定它自己到底有哪些块,由于错误,chunkserver中的一些块可能会很自 然的消失,这样在master中就没有必要为此保存一个不变的记录。

  C、操作日志:

  操作日志包含了对metadata所作的修改的历史记录。它作为逻辑时间线定义了并发操作的执行顺序。文件、块以及它们的版本号 都由它们被创建时的逻辑时间而唯一地、永久地被标识。

  操作日志是如此的重要,我们必须要将它可靠地保存起来,并且只有在metadata的改变固定下来之后才将变化呈现给用户。所以 我们将操作日志复制到数个远程的机器上,并且只有在将相应的日志记录写到本地和远程的磁盘上之后才回答用户的请求。

  Master可以用操作日志来恢复它的文件系统的状态。为了将启动时间减至最小,日志就必须要比较小。每当日志的长度增长到超过 一定的规模后,master就要检查它的状态,它可以从本地磁盘装入最近的检查点来恢复状态。

  创建一个检查点比较费时,master的内部状态是以一种在创建一个检查点时并不耽误即将到来的修改操作的方式来组织的。Master切换到一个新的日志文件并在一个单独的线程中创建检查点。这个新的检查点记录了切换前所有的修改。在一个有数十万文件的集群中用一分钟左右就能完成。创建完后, 将它写入本地和远程的磁盘。

  7)数据完整性:

  名字空间的修改必须是原子性的,它们只能有master处理:名字空间锁保证了操作的原子性和正确性,而master的操作日志 在全局范围内定义了这些操作的顺序。

  文件区间的状态在修改之后依赖于修改的类型,不论操作成功还是失败,也不论是不是并发操作。如果不论从哪个副本上读,所有的客户都看到同样的数据,那么文件的这个区域就是一致的。如果文件的区域是一致的并且用户可以看到修改操作所写的数据,那么它就是已定义的。如果修改是在没有并发写操作的影响下完成的,那么受影响的区域是已定义的,所有的client都能看到写的内容。成功的并发写操作是未定义但却是一致的。失败的修改将使区间处于不一致的状态。

  Write操作在应用程序指定的偏移处写入数据,而record append操作使得数据(记录)即使在有并发修改操作的情况下也至少原子性的被加到GFS指定的偏移处,偏移地址被返回给用户

  在一系列成功的修改操作后,最后的修改操作保证文件区域是已定义的。GFS通过对所有的副本执行同样顺序的修改操作并且使用块版 本号检测过时的副本(由于chunkserver退出而导致丢失修改)来做到这一点。

  因为用户缓存了块位置信息,所以在更新缓存之前有可能从一个过时的副本中读取数据。但这有缓存的截止时间和文件的重新打开而受到 限制。

  在修改操作成功后,部件故障仍可以是数据受到破坏。GFS通过masterchunkserver间定期的handshake ,借助校验和来检测对数据的破坏。一旦检测到,就从一个有效的副本尽快重新存储。只有在GFS检测前,所有的副本都失效,这个块 才会丢失。

 

[GFS学习(二):http://shift-alt-ctrl.iteye.com/blog/1842217]

[GFS学习(三):http://shift-alt-ctrl.iteye.com/blog/1842219]
  • 大小: 35.8 KB
分享到:
评论

相关推荐

    GFS Toolbox.zip_Type-2 Fuzzy_blueqrq_depend1yg_gfs工具箱_gfs工具箱下载

    二型模糊系统的工具箱,一个很好学习二型模糊的软件

    paragust:根据GFS天气模型预测罗纳河谷的风

    开发了机器学习模型(ML模型),以将GFS天气预报模型与Visp中每日测得的最大阵风相关联。 什么是GFS天气模型? 是由NOAA(美国)的一个分支机构开发的数值大气天气模型。 到目前为止,GFS模型是唯一可免费访问历史...

    分布式系统学习——GFS谷歌文件系统Paper翻译1

    第二,大型数据文件的规模出现导致文件观念的改变 第三,文件的改变常为追加(append)而非覆盖(overwrite),对一个文件的随机写操作(random w

    分布式基础学习hadoop

    所谓分布式,在这里,很狭义的指代以Google的三驾马车,GFS、Map/Reduce、BigTable为框架核心的分布式存储和计算系统。通常如我一样初学的人,会以Google这几份经典的论文作为开端的。它们勾勒出了分布式存储和计算...

    云计算(1.3)Google云计算三大核心技术 – 分布式结构化数据表BigTable

    前面学习了GFS(分布式存储系统),MapReduce(分布式数据处理) 接下来学习最后一个技术:分布式结构化数据表BigTable 谷歌技术”三宝”之BigTable Google Bigtable 中文版 引进BigTable GFS(2003年发表)使用商用...

    支持向量学习机的贝叶斯群特征选择

    在本文中,我们提出了一种基于伪似然和数据增强思想的SVL机器的贝叶斯GFS框架。 利用贝叶斯推断,我们的方法可以规避正则化参数的交叉验证。 具体来说,我们在扩展空间中应用均值场变分方法来导出模型参数和超参数...

    distributed-system:分布式系统学习-主要参考MIT课程《分布式系统》

    分布式系统 分布式系统学习 今天2018.03.01准备开始重启2018课程的学习,2018课程地址: ://pdos.csail....etcd-raft:是基于etcd-raft的一个简单的k / v系统,包含一些代码注释,一个代码走读的地址: : : :

    云计算环境学习笔记

    云计算学习过程中积累的笔记总结,五十多页,希望对你有帮助。其中简单概述了Google、Amazon的架构,以一问一答的方式记录。

    Java版水果管理系统源码-Big-Data-Project:大数据项目

    首先是GFS,是为了解决一个问题:如何保存一个文件?->如何保存一个大文件? 原本保存文件时,一个磁盘块为block大小为1024B,同时加入索引,为了存大文件,如果block过小,导致索引过多,因此改变一个block(1024...

    大数据基础知识入门.pdf

    Spark基于DAG的任务调度执行机制,要优于Hadoop MapReduce的迭代执行机制,因此 Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。 Spark 优点: 运行速度快:使用DAG执行引擎以支持循环数据流...

    一步一步学习大数据:Hadoop生态系统与场景

    到底是业务推动了技术的发展,还是技术推动了业务的发展,这个...当我们把时间往回看10年,来到了2003年,这一年Google发表《GoogleFileSystem》,其中提出一个GFS集群中由多个节点组成,其中主要分为两类:一个Mastern

    课程实验基于Java实现的分布式存储系统源码+项目说明.tar

    本系统采用Google的GFS的架构思想,按照一个元数据中心,多个分片服务,多个客户端进行设计 ### 项目所用技术栈:(作为手写分布式存储系统,固然少使用现成的框架与技术,尽可能采用手写的形式来完成系统开发) * ...

    Hadoop学习笔记—1.基本介绍与环境配置

    说到Hadoop的起源,不得不说到一个传奇的IT公司—全球IT技术的引领者Google。Google(自称)为云计算概念的提出者,在自身多年的搜索引擎业务中构建了突破性的GFS(Google FileSystem),从此文件系统进入分布式时代...

    hadoop相关知识习题

    2.对HBase的描述哪些是正确的是:是面向列的,是分布式的,是一种NoSQL数据库 3.HBase依靠HDFS存储底层数据 4.HBase依赖Zookeeper提供消息通信机制 5.HBase依赖MapReduce提供强大的计算能力 6.MapReduce与HBase的...

    使用GFS的乳腺癌威斯康星州(诊断)数据分析:使用聚类和遗传模糊算法分析的乳腺癌威斯康星州(诊断)UCI数据-matlab开发

    开发一个精确的系统来分析乳腺癌图像数据可以使医生对评估患者有更多的信心,并可用于扫描临床数据库中的所有过去扫描结果,以了解是否有任何患者处于危险之中。 模糊逻辑系统非常适合构建可以准确地近似人类专业...

    Hadoop基础培训教程.pdf

    数据分析与报表 预测 数据挖掘与BI 机器学习与Google大 脑 起源与目标 大数据与Hadoop 应用模式 大数据技术IT人员的挑战——DevOps DevOps Development和Operations的 组合,是一组过程、方法与 系统的统称,用于...

    Distribution-System:分布式系统学习

    1:GFS是一种scalable的分布式文件系统,其主要用处是管理数据。 1 Raft是一致性算法来管理复制的日志,它可以产生重复的(multi-)Paxos的结果。2:它的结构跟Paxos不一样,它具有更好的效果。 3:它分开了关键...

    MATLAB神经网络气温预报代码-ANN_FlowForecasting:Matlab代码用于储层流入预测

    GFS预报(提前7天)-降水,最低/最高温度(在Predictors / 文件夹中) 来自CHIRPS的基于临近广播的卫星降水(在Predictors / CHIRPS_Precip文件夹中) 观察到的先验流(Predictors /文件夹中的.xls格式) 产出 潜在...

    ApacheSpark的Lambda架构示例应用

    GFS)的启发。它成为一个独立项目的时间已有10年。目前已经有很多客户实施了基于Hadoop的M/R管道,并成功运行到现在:Oozie的工作流每日运行处理150TB以上的数据并生成分析报告 Bash的工作流每日运行处理8TB以上...

Global site tag (gtag.js) - Google Analytics