(1)租约(lease)和修改顺序:
(2)数据流
我们的目标是充分利用每个机器的网络带宽,避免网络瓶颈和延迟.
为了有效的利用网络,我们将数据流和控制流分离。数据是以流水线的方式在选定的chunkerserver链上线性的传递的。每 个机器的整个对外带宽都被用作传递数据。为避免瓶颈,每个机器在收到数据后,将它收到数据尽快传递给离它最近的机器。
(3)原子性的record Append:
GFS 提供了一个原子性的添加操作:record append。在传统的写操作中,client指定被写数据的偏移位置,向同一个区间的并发的写操作是不连续的:区间有可能包含来自多个client的数据碎片。在record append中, client只是指定数据。GFS在其选定的偏移出将数据至少原子性的加入文件一次,并将偏移返回给client。
在分布式的应用中,不同机器上的许多client可能会同时向一个文件执行添加操作,添加操作被频繁使用。如果用传统的wri e操作,可能需要额外的、复杂的、开销较大的同步,例如通过分布式锁管理。在我们的工作量中,这些文件通常以多个生产者单个消费者队列的方式或包含从多个不同client的综合结果。
Record append和前面讲的write操作的控制流差不多,只是在primary上多了一些逻辑判断。首先,client将数据发送到文件最后一块的所有副本上。然后向primary发送请求。Primary检查添加操作是否会导致该块超过最大的规模(64M )。如果这样,它将该块扩充到最大规模,并告诉其它副本做同样的事,同时通知client该操作需要在下一个块上重新尝试。如果记录满足最大规模的要求,primary就会将数据添加到它的副本上,并告诉其它的副本在在同样的偏移处写数据,最后primary向client报告写操作成功。如果在任何一个副本上record append操作失败,client将重新尝试该操作。这时候,同一个块的副本可能包含不同的数据,因为有的可能复制了全部的数据,有的可能只复制了部分。GFS不能保证所有的副本每个字节都是一样的。它只保证每个数据作为一个原子单元被写过至少一次。这个是这样得出的:操作要是成功,数据必须在所有的副本上的同样的偏移处被写过。进一步,从这以后,所有的副本至少和记录一样长,所以后续的记录将被指定到更高的偏移处或者一个不同的块上,即使另一个副本成了primary。根据一致性保证,成功的record append操作的区间是已定义的。而受到干扰的区间是不一致的。
(4)快照(snapshot)
快照操作几乎在瞬间构造一个文件和目录树的副本,同时将正在进行的其他修改操作对它的影响减至最小。
我们使用copy-on-write技术来实现snapshot。当master收到一个snapshot请求时,它首先将要snapshot的文件上块上的lease。这使得任何一个向这些块写数据的操作都必须和master交互以找到拥有lease的副本。这就给master一个创建这个块的副本的机会。
副本被撤销或终止后,master在磁盘上登记执行的操作,然后复制源文件或目录树的metadata以对它的内存状态实施登记 的操作。这个新创建的snapshot文件和源文件(其metadata)指向相同的块(chunk)。
Snapshot 之后,客户第一次向chunk c写的时候,它发一个请求给master以找到拥有lease的副本。Master注意到chunk c的引用记数比1大,它延迟对用户的响应,选择一个chunk handle C’,然后要求每一有chunk c的副本的chunkserver创建一个块C’。每个chunkserver在本地创建chunk C’避免了网络开销。从这以后和对别的块的操作没有什么区别。
三、MASTER操作
MASTER执行所有名字空间的操作,除此之外,他还在系统范围管理数据块的复制:决定数据块的放置方案,产生新数据块并将其备份,和其他系统范围的操作协同来确保数据备份的完整性,在所有的数据块服务器之间平衡负载并收回没有使用的存储空间。
3.1 名字空间管理和加锁
与传统文件系统不同的是,GFS没有与每个目录相关的能列出其所有文件的数据结构,它也不支持别名(unix中的硬连接或符号连 接),不管是对文件或是目录。GFS的名字空间逻辑上是从文件元数据到路径名映射的一个查用表。
MASTER在执行某个操作前都要获得一系列锁,例如,它要对/d1/d2…/dn/leaf执行操作,则它必须获得/d1,/ d1/d2,…,/d1/d2/…/dn的读锁,/d1/d2…/dn/leaf的读锁或写锁(其中leaf可以使文件也可以是目录)。MASTER操作的并行性和数据的一致性就是通过这些锁来实现的。
3.2 备份存储放置策略
一个GFS集群文件系统可能是多层分布的。一般情况下是成千上万个文件块服务器分布于不同的机架上,而这些文件块服务器又被分布于不同机架上的客户来访问。因此,不同机架上的两台机器之间的通信可能通过一个或多个交换机。数据块冗余配置策略要达到连个目的:最大的数据可靠性和可用性,最大的网络带宽利用率。因此,如果仅仅把数据的拷贝置于不同的机器上很难满足这两个要求,必须在不同的机架上进行数据备份。这样即使整个机架被毁或是掉线,也能确保数据的正常使用。这也使数据传输,尤其是读数据,可以充分利用带宽,访问到多个机架,而写操作,则不得不涉及到更多的机架。
3.3 产生、重复制、重平衡数据块
当MASTER产生新的数据块时,如何放置新数据块,要考虑如下几个因素:(1)尽量放置在磁盘利用率低的数据块服务器上,这样,慢慢地各服务器的磁盘利用率就会达到平衡。(2)尽量控制在一个服务器上的“新创建”的次数。(3)由于上一小节讨论的原因,我们需要把数据块放置于不同的机架上。
MASTER在可用的数据块备份低于用户设定的数目时需要进行重复制。这种情况源于多种原因:服务器不可用,数据被破坏,磁盘被破坏,或者备份数目被修改。每个被需要重复制的数据块的优先级根据以下几项确定:第一是现在的数目距目标的距离,对于能阻塞用户程序的数据块,我们也提高它的优先级。最后,MASTER按照产生数据块的原则复制数据块,并把它们放到不同的机架内的服务器上 。
MASTER周期性的平衡各服务器上的负载:它检查chunk分布和负载平衡,通过这种方式来填充一个新的服务器而不是把其他的内容统统放置到它上面带来大量的写数据。数据块放置的原则与上面讨论的相同,此外,MASTER还决定哪些数据块要被移除,原则上他会清除那些空闲空间低于平均值的那些服务器。
3.4 垃圾收集
在一个文件被删除之后,GFS并不立即收回磁盘空间,而是等到垃圾收集程序在文件和数据块级的的检查中收回。
当一个文件被应用程序删除之后,MASTER会立即记录下这些变化,但文件所占用的资源却不会被立即收回,而是重新给文件命了一个隐藏的名字,并附上了删除的时间戳。在MASTER定期检查名字空间时,它删除超过三天(可以设定)的隐藏的文件。在此之前,可以以一个新的名字来读文件,还可以以前的名字恢复。当隐藏的文件在名字空间中被删除以后,它在内存中的元数据即被擦除,这就有效地切断了他和所有数据块的联系。
在一个相似的定期的名字空间检查中,MASTER确认孤儿数据块(不属于任何文件)并擦除他的元数据,在和MASTER的心跳信 息交换中,每个服务器报告他所拥有的数据块,MASTER返回元数据不在内存的数据块,服务器即可以删除这些数据块。
3.5 过时数据的探测
在数据更新时如果服务器停机了,那么他所保存的数据备份就会过时。对每个数据块,MASTER设置了一个版本号来区别更新过的数 据块和过时的数据块。
当MASTER授权一个新的lease时,他会增加数据块的版本号并会通知更新数据备份。MASTER和备份都会记录下当前的版本号,如果一个备份当时不可用,那么他的版本号不可能提高,当ChunkServer重新启动并向MASTER报告他的数据块集时,MASTER就会发现过时的数据。
MASTER在定期的垃圾收集程序中清除过时的备份,在此以前,处于效率考虑,在各客户机应答时,他会认为根本不存在过时的数据。作为另一个安全措施,MASTER在给客户及关于数据块的应答或是另外一个读取数据的服务器数据是都会带上版本信息,在操作前客户机和服务器会验证版本信息以确保得到的是最新的数据。
[GFS学习(一):http://shift-alt-ctrl.iteye.com/blog/1842191]
[GFS学习(三):http://shift-alt-ctrl.iteye.com/blog/1842219]
相关推荐
GFS2文件系统,作为Red Hat全球文件系统(Global File System)的第二代版本,是专为Red Hat Enterprise Linux 5设计的一款集群文件系统。它为运行多个节点的集群环境提供高性能、高稳定性的共享存储解决方案。在...
GFS Toolbox是一款专为研究和学习类型-2模糊系统(Type-2 Fuzzy Systems)而设计的软件工具箱。该工具箱提供了一系列的功能和算法,旨在帮助用户理解、设计和实现复杂的模糊逻辑控制策略。在模糊逻辑领域,类型-2...
#### 二、设计目标与需求 GFS的设计主要基于以下目标: 1. **可扩展性**:系统需要支持大量的客户端并发访问以及海量的数据存储。 2. **容错性**:能够在硬件故障的情况下继续提供服务,确保数据的完整性。 3. **...
### Google三大论文与Hadoop生态系统的关键技术 #### 一、Google三大论文概述 Google三大论文分别指的是《Google File System》、...通过深入学习这些论文,我们可以更好地理解和应用当前的大数据处理技术。
GFS遵循特定的开源协议,这意味着源代码是公开的,允许任何人查看、学习、复制、修改和分发代码,只要遵守协议规定。这可能涉及到如MIT、Apache 2.0或GPL等常见的开源许可。开源协议的使用鼓励了开发者社区的贡献,...
二、Hadoop学习笔记之五:使用Eclipse插件 Eclipse插件是开发Hadoop应用的重要工具,它提供了集成的开发环境,使得开发者可以更方便地编写、调试和运行Hadoop程序。通过插件,用户可以创建Hadoop项目,编写MapReduce...
在深入理解云计算的第二章中,我们重点关注了Google的云计算技术,特别是涉及到了几个关键组件:Google文件系统(GFS)、分布式计算编程模型MapReduce以及分布式锁服务Chubby。这些技术是构建大规模分布式系统的基础...
游戏板可以表示为二维数组,每个元素代表一个格子。此外,我们还可以使用对象来封装玩家的信息,如他们的标记(通常是'X'或'O')和是否获胜的状态。 4. 条件语句(if...else):在实现游戏逻辑时,我们需要根据当前...
#### 二、北航云计算课程中的GFS介绍 在北航的云计算课程中,GFS被作为一个重要的研究对象进行分析。本课件旨在深入探讨GFS的设计原理和技术细节,帮助学生理解大型分布式系统的构建过程。以下是对GFS几个核心概念和...
#### 第二篇章:Cloud Computing 虽然这部分内容未给出具体信息,但可以推测该篇章会涉及云计算的基本概念、发展历程以及与传统计算模型的对比等内容。云计算是基于互联网的一种服务模型,提供按需的计算资源和服务...
#### 二、GlusterFS 集群安装方式补充 ##### 2.1 RPM 包安装 RPM 包安装是一种非常方便的安装 GlusterFS 的方式,它能够确保软件包的依赖关系得到正确处理。以下是具体步骤: **准备环境:** - 确保有一台干净的 ...
用户需要首先解压文件,然后参照博主的文章学习如何利用JSON解析工具或编程语言(如JavaScript)读取data.json文件中的数据,并结合Cesium库将其在3D场景中呈现出来,实现风场的动态可视化。这样的数据和工具对于...
- 2003-2004年:Google公开GFS和MapReduce思想细节。 - 2005年:Hadoop作为Nutch的一部分加入Apache基金会。 - 2006年:Map-Reduce和NDFS被纳入Hadoop项目。 ##### 2.3 Hadoop发行版本 - **Apache版本**:最基础...
《云计算》第二版配套PPT是一份由刘鹏教授编写的、专为云计算初学者设计的学习资料。这个压缩包包含了多个章节的PPT文件,详细介绍了云计算的基础理论、主要技术及应用实例,涵盖了Google、Amazon、微软等业界巨头的...
5. 分布式数据存储与检索:如GFS(Google File System)、HDFS(Hadoop Distributed File System)等,它们是大数据处理的基础,涉及到数据分片、冗余备份和容错机制。 6. 分布式一致性算法:如二阶段提交(2PC)、...
这份"云计算 第二版 刘鹏 2012 完整版ppt"提供了全面深入的云计算知识体系,由知名专家刘鹏教授编著,共包含20份PPT,涵盖了云计算的基础理论、核心技术以及实际应用。 在内容方面,这份资料重点讲解了以下几个关键...
1. **Hadoop概述**:Hadoop是由Apache基金会开发的一个开源项目,基于Google的MapReduce编程模型和GFS分布式文件系统。它的设计目标是高容错性、可扩展性和高效的数据处理。 2. **Hadoop组件**: - **HDFS(Hadoop...
这个"bfs-gfs-py"项目对于学习和理解图遍历算法是很好的实践案例。通过阅读和理解代码,我们可以深入学习Python数据结构的使用,以及如何有效地实现算法。同时,这也是一个不错的教学资源,帮助初学者掌握图论的基本...