下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

你了解分布式存储 HDFS 与 GFS 的设计差别吗?

作者:课课家教育     来源: http://www.kokojia.com点击数:1947发布时间: 2017-07-18 11:00:47

标签: HDFSGFS分布式存储

  课课家教育平台欢迎各位阅读本篇文章,本篇文章讲述了分布式存储 HDFS 与 GFS 的设计差别,我们知道 HDFS 最早是根据 GFS(Google File System)的论文概念模型来设计实现的。温馨小提醒:本篇文章中有许多的小细节,因此大家要认真阅读本篇文章哦~

     「后端分布式系列」前面关于 HDFS 的一些文章介绍了它的整体架构和一些关键部件的设计实现要点。

  我们知道 HDFS 最早是根据 GFS(Google File System)的论文概念模型来设计实现的。

  然后呢,我就去把 GFS 的原始论文找出来仔细看了遍,GFS 的整体架构图如下:

你了解分布式存储 HDFS 与 GFS 的设计差别吗?_HDFS_GFS_分布式存储_课课家教育

  HDFS 参照了它所以大部分架构设计概念是类似的,比如 HDFS NameNode 相当于 GFS Master,HDFS DataNode 相当于 GFS chunkserver。

  但还有些细节不同的地方,所以本文主要分析下不同的地方。

  写入模型:

  HDFS 在考虑写入模型时做了一个简化,就是同一时刻只允许一个写入者或追加者。

  在这个模型下同一个文件同一个时刻只允许一个客户端写入或追加。

  而 GFS 则允许同一时刻多个客户端并发写入或追加同一文件。

  允许并发写入带来了更复杂的一致性问题。

  多个客户端并发写入时,它们之间的顺序是无法保证的,同一个客户端连续追加成功的多个记录也可能被打断。

  这意味着一个客户端在连续写入文件数据时,它的数据最终在文件中的分布可能是不连续的。

  所谓一致性就是,对同一个文件,所有的客户端看到的数据是一致的,不管它们是从哪个副本读取的。

  如果允许多个客户端同时写一个文件,怎么保证写入数据在多个副本间一致?

  我们前面讲 HDFS 时它只允许一个写入者按流水线方式写入多个副本,写入顺序一致,写入完成后数据将保持最终一致。

  而对多个客户端而言,就必须让所有同时写入的客户端按同一种流水线方式去写入,才可能保证写入顺序一致。

  这个写入流程我们下一节详细分析。

  写入流程:

  GFS 使用租约机制来保障在跨多个副本的数据写入中保持顺序一致性。

  GFS Master 将 chunk 租约发放给其中一个副本,这个副本我们就称为主副本,其他副本称为次副本。

  由主副本来确定一个针对该 chunk 的写入顺序,次副本则遵守这个顺序,这样就保障了全局顺序一致性。

  chunk 租约机制的设计主要是为了减轻 Master 的负担,由主副本所在的 chunkserver 来承担流水线顺序的安排。

  如下图,我们详细描述下这个过程。

chunk 租约机制的设计主要是为了减轻 Master 的负担,由主副本所在的 chunkserver 来承担流水线顺序的安排。  如下图,我们详细描述下这个过程。

  知识分享:

  Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodityhardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为ApacheNutch搜索引擎项目的基础架构而开发的。HDFS是ApacheHadoopCore项目的一部分。

  GFS和HDFS在关键点的设计上差异很大,HDFS为了规避GFS的复杂度进行了很多简化。首先,GFS最为复杂的部分是对多客户端并发追加同一个文件,即多客户端并发Append模型。

  GFS允许文件被多次或者多个客户端同时打开以追加数据,以记录为单位。假设GFS追加记录的大小为16KB ~ 16MB之间,平均大小为1MB,如果每次追加都访问GFS Master显然很低效,因此,GFS通过Lease机制将每个Chunk的写权限授权给Chunk Server。写Lease的含义是Chunk Server对某个Chunk在Lease有效期内(假设为12s)有写权限,拥有Lease的Chunk Server称为Primary Chunk Server,如果Primary Chunk Server宕机,Lease有效期过后Chunk的写Lease可以分配给其它Chunk Server。

  多客户端并发追加同一个文件导致Chunk Server需要对记录进行定序,客户端的写操作失败后可能重试,从而产生重复记录,再加上客户端API为异步模型,又产生了记录乱序问题。

  Append模型下重复记录、乱序等问题加上Lease机制,尤其是同一个Chunk的Lease可能在Chunk Server之间迁移,极大地提高了系统设计和一致性模型的复杂度。而在HDFS中,HDFS文件只允许一次打开并追加数据,客户端先把所有数据写入本地的临时文件中,等到数据量达到一个Chunk的大小(通常为64MB),请求HDFS Master分配工作机及Chunk编号,将一个Chunk的数据一次性写入HDFS文件。

  由于累积64MB数据才进行实际写HDFS系统,对HDFS Master造成的压力不大,不需要类似GFS中的将写Lease授权给工作机的机制,且没有了重复记录和乱序的问题,大大地简化了系统的设计。然而,我们必须知道,HDFS由于不支持Append模型带来的很多问题,构建于HDFS之上的Hypertable和HBase需要使用HDFS存放表格系统的操作日志,由于HDFS的客户端需要攒到64MB数据才一次性写入到HDFS中,Hypertable和HBase中的表格服务节点(对应于Bigtable中的Tablet Server)如果宕机,部分操作日志没有写入到HDFS,可能会丢数据。其次是Master单点失效的处理。

  GFS中采用主从模式备份Master的系统元数据,当主Master失效时,可以通过分布式选举备机接替主Master继续对外提供服务,而由于Replication及主备切换本身有一定的复杂性,HDFS Master的持久化数据只写入到本机(可能写入多份存放到Master机器的多个磁盘中防止某个磁盘损害),出现故障时需要人工介入。另外一点是对快照的支持。GFS通过内部采用copy-on-write的数据结构实现集群快照功能,而HDFS不提供快照功能。

  在大规模分布式系统中,程序有bug是很正常的情况,虽然大多数情况下可以修复bug,不过很难通过补偿操作将系统数据恢复到一致的状态,往往需要底层系统提供快照功能,将系统恢复到最近的某个一致状态。总之,HDFS基本可以认为是GFS的简化版,由于时间及应用场景等各方面的原因对GFS的功能做了一定的简化,大大降低了复杂度。

  Hadoop优点:

  Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:

  ⒈高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。

  ⒉高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

  ⒊高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

  ⒋高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

  Hadoop带有用 java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。

Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodityhardware)上的分布式文件系统。

  1.客户端请求 Master 询问哪个 chunkserver 持有租约以及其他副本的位置。如果没有 chunkserver 持有租约,说明该 chunk 最近没有写操作。Master 则选择将租约授权给其中一台 chunkserver。

  2.Master 返回客户端主副本和次副本的位置信息。客户端缓存这些信息以备将来使用。客户端以后不再需要联系 Master,除非主副本所在 chunkserver 不可用或返回租约过期了。

  3.客户端选择最优的网络顺序推送数据,chunkserver 将数据先缓存在内部的 LRU 缓存中。GFS 中采用数据流和控制流分离的方法,从而能够基于网络拓扑结构更好地调度数据流的传输。

  4.一旦所有的副本确认收到了数据,客户端将发送一个写请求控制命令到主副本。由主副本分配连续的序列号来确定最终的写入顺序。

  5.主副本转发写请求到所有次副本,次副本按主副本安排的顺序执行写入操作。

  6.次副本写完后向主副本应答确认操作完成。

  7.最后主副本应答客户端,若任意副本写入过程中出现错误,将报告给客户端,由客户端发起重试。

  GFS 和 HDFS 的写入流程都采用了流水线方式,但 HDFS 没有分离数据流和控制流。

  HDFS 的数据流水线写入在网络上的传输顺序与最终写入文件的顺序一致。

  而 GFS 数据在网络上的传输顺序与最终写入文件的顺序可能不一致。

  GFS 在支持并发写入和优化网络数据传输方面做出了最佳的折衷。

  总结:

  GFS 的论文发表于 2003 年,后来大部分的分布式文件系统设计实现或多或少都参考了 GFS 的设计思路。

  而 HDFS 算是开源分布式文件系统中最完整实现了 GFS 论文中的概念模型。

  但 HDFS 依然简化了 GFS 中关于并发写的思路,本文就两者的写入模型和过程做了一些对比说明,并希望引发一些思考。

     小结:相信最后大家阅读完毕本篇文章后,学到了不少知识吧?GFS在功能上非常完善,非常强大,而HDFS在策略上较之简单些,主要是为了有利于实现。当然如果过大家还想要更深入的了解相关方面的知识的话呢,不妨登录课课家教育平台平台,在这里,你可以学习到更多详细的相关内容,欢迎大家咨询~

赞(1)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程