简析GFS和HDFS的部分设计目标及解决方案_gfsqw-程序员宅基地

技术标签: hdfs  论文  大数据  

摘要

本文主要对《The Google File System》和《The Hadoop Distributed File System》两篇论文进行了介绍以及阐述了个人对这两篇论文内容的理解。本人在学习大数据的过程的中不断看到“受到谷歌论文的启发”这样的字眼,因此阅读了《The Google File System》(8160次引用),同时为了与之比较,还阅读了《The Hadoop Distributed File System》(4675次引用)。本文首先简单介绍了GFS的架构,然后详细介绍了GFS对组件失效、文件巨大、文件追加操作频繁这三个问题的解决方案,以及为了提高系统性能、在满足可用性的条件下简化系统设计做出的努力。最后对HDFS做了简单介绍,对比了HDFS和GFS的相同与不同之处,总结了一些从这两篇论文学到的关于分布式文件系统设计的通用方法。

关键词: 分布式文件系统,GFS,HDFS,设计目标,性能

1 引言

《The Google File System 》是谷歌在大数据领域的三篇著名论文之一,发表于2003年。Doug Cutting在谷歌论文的启发下发起了Hadoop项目。2010年来自Yahoo!的技术人员发表了《The Hadoop Distributed File System》并在论文中介绍了HDFS在Yahoo!的实际应用。

读完两篇论文后,我个人感受是GFS 介绍的主要是概念模型,更多的是从实现目标的角度来描述系统的细节。在各个部分的设计中都给出了背后的原因和相关尝试,非常有启发性。而HDFS 的描述则更贴近应用,涉及到了很多实际的Hadoop工具,提及了具体的服务器注册、下线,还有很多地方都提到了用户程序可以直接调用的操作命令。

在阅读GFS的时候,本人对各个细节背后为了提升容错性、系统性能等目标的深思熟虑印象深刻,因此想要对GFS对各个目标所采取的的解决方案做一个总结,并且试图从中找出一些通用的方法。此外,通过简单对比就能看出HDFS是从GFS发展而来。HDFS到底从GFS继承了什么,又发展了什么,这些也是本文所关心的。

2 GFS介绍

2.1 GFS架构简介

在Figure1中展示了在GFS中客户端读取数据的一个过程。一个 GFSGFSGFS集群包含一个单独的Master Master Master 节点,多台 ChunkChunk 服务器,并且同时被多个客户端访问。Master节点管理文件系统的元数据,包括namespace,访问控制信息、文件和Chunk的映射信息、当前Chunk的位置信息。GFS中的文艺存储在固定大小的Chunk中,而Chunk以Linux文件的形式保存在ChUNK服务器中。客户端可以通过GFS提供的API与Master节点、Chunk服务器通信、对数据执行读写操作。

2.2 GFS中提出的用于大数据处理的分布式文件系统设计的目标

在GFS中的设计目标章节中,根据现实应用的经验提出了以下几个观点:

(1)组件失效是常态,而非异常。因此必须采用持续监控、错误侦测、灾难冗余、自动恢复机制这些措施来解决。 (2)文件通常非常巨大。为了适应大文件,需要更改block尺寸并且尽量提高I/O操作的效率。 (3)绝大部分文件修改是在文件尾部追加数据。为了对这一特点做出优化,需要保证数据追加操作的原子性和效率。同时客户端也无需对数据块进行缓存。

除了这几个观点,在行文中作者也不断地强调以下两点的重要性:
(1)尽可能提高性能,防止系统产生瓶颈。
(2)在不影响可用性的情况下,尽量简化系统设计,降低成本。

在GFS的系统细节中也能够时时看到设计者对以上这5个目标做出的努力。 以上这5个目标肯定不是大数据处理的分布式文件系统设计内容的全部,其中也有一些重叠的地方。但整体上来说这5个目标在这篇论文中涉及的内容非常多,解决方案也非常有启发性。所以我会对这个5个目标在GFS中的表现做一个详细介绍,总结一下这些解决方案给我带来的启发。

2.3 组件失效的解决方案

要解决组件失效,首先就是要进行持续监控。具体做法是Master节点通过周期性的心跳信息监控Chunk服务器的状态。其次,还需要进行错误侦测,GFS采取了这些措施:(1)Master服务器会和所有Chunk服务器定期“握手”,来找到失效的Chunk服务器,并且用Checksum来校验数据是否损坏。一旦发现问题,数据要尽快利用有效的副本进行恢复。(2)Chunk服务器的错误可能会导致Chunk自动消失,所以Master节点通过定期轮询来更新Chunk的位置信息。(3)GFS的服务器会产生大量的日志,这些记录可以用作诊断工具。

此外,还需要进行灾难冗余:(1)每个Chunk一般会创建3个副本,用户也可以指定副本的数量。这些副本在多个机架间分布存储。保证一些副本在整个机架被破坏的情况下依然可用。(2)日志会存储在本地磁盘上,同时日志会被复制到其他的远程Master服务器上。并且只有把相应的日志记录写入到本地以及远程机器的硬盘后,才会响应客户端的操作请求。(3)Master服务器的状态也要复制。Master服务器所有的操作日志和Checkpoint文件都被复制到多台机器上。此外,GFS中还有些“影子”Master服务器,它们在主Master服务器宕机的时候提供文件系统的只读访问。

有了灾难冗余,就要通过自动恢复机制来恢复数据。在GFS中,文件和Chunk的命名空间、文件和Chunk的对应关系的变更会记录到到操作系统的日志。这个日志是元数据位移的持久化存储记录,也作为判断同步操作顺序的逻辑时间基线。GFS还使用了基于Copy-to-write的快照技术,可以迅速创建一个巨大的数据集的分支拷贝,用于备份当前状态。之后可以轻松回滚到备份前的状态。

2.4 针对大文件提出的适应性解决方案

GFS中详细介绍了Chunk尺寸的方案及背后原因。

首先是选择64MB作为block尺寸。这样做的好处有:(1)可以减少了客户端和Master节点通讯的需求。(2)客户端可以轻松缓存一个数TB的工作数据及所有的Chunk位置信息。(3)客户端可以对一个块进行多次操作,可以通过与Chunk服务器保持较长时间的TCP连接来减少网络负载。(4)减少了Master节点需要保存的元数据的数量,允许把全部元数据放在内存中。使得Master服务器的操作速度非常快,也可以使Master服务器在后台简单而高效的周期性扫描全部状态信息。这样做还有一个潜在的缺陷,那就是Chunk的数量以及整个系统的承载能力受限与Master服务器拥有的内存大小。

其次GFS的Chunk采用惰性空间分配策略。每个Chunk的副本都以普通Linux文件的形式保存在Chunk服务器上,只有在需要的时候才扩大。这样避免了因内部碎片造成的空间浪费。这样做也有潜在缺陷:小文件包含较少的Chunk。当多个客户端对同一个小文件进行多次访问时,存储这些Chunk的服务器会变成热点。

2.5 为了保证数据追加操作的原子性采取的措施

对于绝大部分文件修改是在文件尾部追加数据的情况,GSF使用记录追加,客户机只需要指定要写入的数据,GFS保证至少有一次的写入操作成功执行。当有很多客户机并行对同一个文件追加写入数据时,不需要额外的同步机制,而是使用一个多生产者、单一消费者的队列。

2.6 在满足可用性基础上的简化设计

首先,GFS的系统架构采用单一Master节点,这极大地简化了原本非常复杂的Chunk分配和复制策略的实现方法。其次,由于绝大部分文件修改是在文件尾部追加数据,所以无需考虑客户端和Chunk服务器的缓存文件数据本身的问题。客户端只需要缓存一些元数据。此外,对于Chunk的位置信息究竟怎么存储这个问题,GFS的做法是不把Chunk的位置信息持久保存在Master服务器上,而是在启动的时候轮询Chunk服务器,之后定期轮询更新。这种设计简化了在有Chunk服务器加入集群、离开集群、更名、失效以及重启的时候,Master服务器和Chunk服务器数据同步的问题。最后,在垃圾回收问题上,GFS空间回收采用惰性策略,只在文件和Chunk级的常规垃圾收集时才进行。

2.7 为提高性能,避免系统瓶颈的一些解决方案

2.7.1 防止单一的Master结点成为系统瓶颈

GFS设计的一个重要原则就是要最小化所有操作和Master节点的交互。客户端并不通过Master节点读写文件数据。反之,客户端向Master节点询问它应该联系的Chunck服务器。客户端将这些元数据信息缓存一段时间,后续的操作将直接和Chunk服务器进行数据读写操作。

此外,为降低Master节点的管理成本,GFS使用租约机制来保持多个副本间变更顺序的一致性。Master节点为主Chunk建立一个租约, 主Chunk度Chunk的所有更改操作进行序列化,所有副本都遵从这个序列进行修改操作。

为了提高Master节点操作的效率,Master节点允许多个操作同时进行,使用namespace上的region上的锁来保证执行的正确顺序。读写锁采用惰性分配策略,在不再使用的时候立刻删除。

2.7.2 防止冗余创建效率低下,影响系统性能

写日志是非常频繁的一个操作,Master服务器会收集多个日志记录后批量处理,以减少写入磁盘和复制对系统整体性能的影响。日志的数量和大小也需要进行控制。GFS采用Checkpoint技术,在日志达到一定量时保存一次数据库状态,写入一个Checnpoint文件。这样一来,重演Checkpoint之后的有限个日志文件就能够恢复系统。此外,Checkpoint文件还以压缩B-树的数据结构存储,大大提高了恢复速度。

Master服务器使用独立的线程切换到新的日志文件和创建新的Checkpoint文件,确保在Checkpoint过程中不会阻塞正在进行的修改操作。

2.7.3 尽量避免网络瓶颈

GFS把数据流和控制流分开。数据以管道的方式,沿着一个Chunk服务器链顺序推送。线性推送模式下,每台机器所有的出口带宽都用于以最快的速度传输数据。不仅如此,每台机器尽量在网络拓扑中选择一台未接收数据的、最近的机器推送数据。最后,GFS利用基于TCP连接的、管道式数据推送方式来最小化延迟。

3 HDFS介绍

3.1 HDFS简介

Hadoop是一个Apache项目,它提供了一个分布式文件系统及一个使用MapReduce范式进行大规模数据集分析和转换的框架。HDFS正是Hadoop的文件系统组件。它的接口类似与Unix文件系统,但是为了提高应用程序性能,它并没有严格遵从标准。

3.2 HDFS与GFS的对比

3.2.1架构

在这里插入图片描述

HDFS采用元数据和文件分开采取的策略。在一个集群中,元数据存在NameNode上,文件被存储在划分好的block上,block存储在多个DataNodes上。客户端要进行读写操作时,先与NameNode通信得到对应DataNode的标识,再去具体的DataNode上读写数据。这与GFS的架构是相似的。NameNode对应了GFS的Master服务器,而DataNodes对应了GFS的Chunk Server。Block的说法也和Chunk类似。

与GFS文章中提到的单一Master不同的是,HDFS的作者写道:分布式文件系统的趋势是集群化namespace。这也意味着将会在一个集群中设置多个NameNode。曾经的谷歌分布式文件系统也已经演化成一个分布式namespace的实现,将会具有数百个masters。

3.2.2 防止组件失效的解决方案

在持续监控方面,NameNode会通过对心跳的响应信息来向DataNode发送指令,而DataNode会和NameNode发送blockReport和心跳信息(证实可用)。这与GFS中的周期性心跳信息是相似的。
在错误侦测方面, HDFS同样会生成文件中每个block的校验和,来防止因为磁盘或网络等问题而造成的DataNode副本损坏。DataNode会被周期性扫描,用来验证block数据和校验和是否匹配。具体实现的工具是Block Scanner。

在灾难冗余方面,HDFS没有使用ACID这样的数据保护机制来保证数据的持久性,而是像GFS一样通过将文件内容复制到多个DataNodes上来保证可靠性。每个blocks会被复制到多个DataNodes上,通常是3个。

在自动恢复机制方面,HDFS也会使用快照来使得数据可以回滚到以前的状态,并且特意考虑了在系统升级状态下的应用。但是HDFS还会在DataNode结点上创建快照。具体做法是由NameNode在握手期间向DataNodes发出创建快照的命令,然后DataNodes为现有的block文件创建出硬链接到存储目录下,而不是真正的存储目录的拷贝。防止DataNodes结点的存储空间加倍。

HDFS也有Checkpoint机制,与GFS略不同的是,Checkpoint的管理由一个专门的CheckpointNode进行。HDFS中设置了BackupNode,它和GFS中“影子Master”的作用很像。它既可以创建checkpoints还可以在内存中维护namespace的最新映像。它可以被看做一个只读的NameNode。可以由它来代替NameNode去做持久化存储,从而降低NameNode的负载。有趣的一点是,在HDFS中NameNode还可以担任CheckpointNode或者是BackupNode的角色。

3.2.3 block尺寸的设计

在GFS中,Chunk大小通常是64MB,作者认为这样大的尺寸容易引来争议,并详细介绍了设置大尺寸Chunk的种种优点。而在HDFS中为了放大这些优点,文件内容被切分更大的blocks,通常是128MB。

3.2.4 为了提高NameNode的效率采取的措施

为了提高NameNode的效率,HDFS同样使用租约机制来降低NameNode的管理成本,且允许多个操作同时进行。利用租约机制可以阻止其他客户端对一个已经正在写的文件进行写入。正在写入的客户端会通过向NameNode发送的心跳信息周期性更新该租约。文件关闭,租约释放。此外,HDFS还通过soft limit和hard limit来判断到期后对没有更新租约的客户端的执行何种操作。如果soft limit过期了,而客户端没有成功的关闭该文件或者更新该租约,另一个客户端将会优先获取到该租约。如果hard limt过期(1小时),同时客户端仍未能成功更新该租约,HDFS会假设该客户端退出了同时会代替该写者自动地关闭该文件,然后释放该租约。

3.2.4 HDFS与MapReduce的配合

在GFS中,作者不断强调文件系统的设计要基于本公司的技术环境和应用的负载情况。HDFS文章中也提到了文件系统的设计需要和Hadoop其他组件配合。比如,HDFS的IO设计就为像MapReduce这样需要高顺序读写吞吐率的批处理系统特殊优化过。同时它还需要花费很大精力来提高HDFS的读写响应时间,来支持Scribe或Hbase。

MapReduce也在HDFS中发挥作用。在处理大规模数据集时,将数据拷入或拷出HDFS集群是很吓人的。HDFS为大规模的集群内/集群间拷贝提供一个叫做DistCp的工具。它就是一个MapReduce job;每个Map task会将元数据的一部分拷贝到目标文件系统。MapReduce框架会自动地处理并行task的调度,错误检测和恢复。

4 小结

通过对两篇文章的分析,可以从中总结用于大数据处理的分布式文件系统设计的一些普适性的方法:
(1)在提高系统的容错性方面,首先可以让节点间进行周期性的通信,从而进行监控和侦测;通常使用副本来建立冗余,副本的数量和位置需要一定的策略;通常使用日志技术来建立自动恢复机制,这在传统数据库中也是重要一环;数据损坏经常使用Checksum来校验,这在计算机网络的检错机制中也有体现。
(2)为了防止单个节点出现瓶颈,可以尽量减少其他操作和它的交互,将部分任务分配给其他节点,降低管理压力。
(3)惰性(延迟处理)策略也是提高效率的一种常用方法,应用非常广泛。例如在GFS中,就用在了空间回收、Master读写锁分配、Chunk副本容量扩大等方面。

以上总结只是本次文献阅读的个人看法,并不是非常全面,但是让我对应用于大数据处理的分布式文件系统有了更多的思考。此外,可以看到文章中提到的一些思想在其他计算机研究领域也有很多应用,这样的迁移重现让我感受到了经典算法的魅力。

参考文献

[1] Ghemawat S, Gobioff H, Leung S T. The Google file system[J]. 2003.
[2] Shvachko K, Kuang H, Radia S, et al. The hadoop distributed file system[C]//MSST. 2010, 10: 1-10.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36622009/article/details/123232984

智能推荐

acrh17华硕固件_华硕路由器Asus RT-ACRH17 OpenWrt,刷openwrt教程-程序员宅基地

文章浏览阅读8k次。华硕路由器刷OPENWRT教程注:该教程整理自恩山论坛,因论坛内容较为繁琐,理解不便,特整理优化本文。所需文件列表解锁Bootloader的固件【openwrt-ipq806x-asus_rt-acrh17-squashfs-flash-factory.trx】opboot固件【opboot-rt-acrh17-flash-v1.0.6.bin】lean制作的openwrt固件【openwrt-i..._ipq806x固件

PS的一些实用小技巧_ps小技巧-程序员宅基地

文章浏览阅读708次。PS使用技巧1.新建文件快捷键 Ctrl+N2.图像调整快捷键 Ctrl+T什么都不按,以一个顶角或一条线为固定,从不同方向等比例放大缩小.按住Alt放缩,以中心点等比例放大缩小.按住shift,以一个顶角或一条线为固定,无比例限制自由放大缩小.3.新建参考线视图→新建参考线命令4.标尺快捷键 Ctrl+R5.调整字体和颜色点击T工具图标,选择写字的位置并点击,点开窗口,选择字符,即可调整字体及颜色等细节。6.绘制圆形选择椭圆工具,按住shift建,即可绘制_ps小技巧

《TCP/IP详解卷1》学习小结(三)------ARP协议与RARP协议_arp,tcp/ip,telnet协议心得-程序员宅基地

文章浏览阅读1.8k次。一. 总述 简单的说,ARP协议就是将IP地址转换为MAC物理地址;而RARP,就是ARP的逆向,也就是将MAC物理地址转换为IP地址。看起来这两个协议是完全对称的,但发明这两个协议的初衷基本上没有什么关系。ARP协议是为了在链接层中传输的datagram只能识别MAC地址,所以只能将IP地址转换为MAC物理地址再进行传输和定向;RARP协议是为了获取无磁盘操作系统的IP地址_arp,tcp/ip,telnet协议心得

json数组根据某个字段的值进行排序_json根据字段排序-程序员宅基地

文章浏览阅读2.3k次。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>json数组根据某个字段的值进行排序</title></head><body>&am_json根据字段排序

配置VSCode的C++编译环境_qualified name is not allowed-程序员宅基地

文章浏览阅读1.1k次。过去的两个学期一直使用的是老师推荐的IDE codeblocks.平心而论cb对于c++初学者来说的确非常方便好用,功能集成很强大。但是可能是我电脑配置的原因(轻薄本i5-8250u且之前装了一些流氓软件导致运行变慢)且cb被装在了非固态硬盘,启动速度和编译速度都比较慢。后来我发现了轻巧的vscode。颜狗立刻被吸引了。于是寻找教程,配置了vscode+g++的编译模式。主要参考VSCode+C..._qualified name is not allowed

Linux分布式编译环境搭建介绍_distccmon-gnome-程序员宅基地

文章浏览阅读9.4k次。1.Distcc介绍distcc是一个非常快且免费的分布式C/C++编译工具,distcc分为四个部分:distcc:distcc是一个类似客户端的程序,不过它的角色是个编译器,可以让C/C++代码在很多网络服务器上进行分布式的编译,就像本地编译一样,当然比本地编译快很多。distccd:distccd是一个守护进程,每个网络服务器上都需要安装这个守护进程,用来处理dist_distccmon-gnome

随便推点

合泰杯 | 合泰单片机入门 定时器详解(三)_合泰单片机定时器怎么用-程序员宅基地

文章浏览阅读1w次,点赞22次,收藏90次。说在前面:好久没有更新是因为一直在忙,想必关注这个系列博文的都是参加合泰公司比赛的小伙伴,后台有好些小伙伴给我私我什么时候更新,这里先道个歉,不好意思久等了。人啊,知道的越多就越迷茫,所以做一个“无知“”的人是多么的快乐啊!!!好的言归正传,我们今天要说的就是合泰单片机的定时器功能。一、定时器模块 – TM介绍分类控制和测量时间在任何单片机中都是一个很重要的部分。该系列单片机(注..._合泰单片机定时器怎么用

常用CSS样式_常用的css样式,你知道的有哪些,请标清序号,先用文字说明作用,再写出代码?-程序员宅基地

文章浏览阅读134次。css概述Cascading Style Sheets, 层叠样式表,又叫级联样式表,简称样式表。给HTML标签添加样式, 美化网页css 的三种引入方式2.1 行内样式或内联样式特点:在HTML标签上进行样式的声明语法:<Any style="样式声明;color:red;样式声明"></Any>样式声明:属性名:属性值缺点:结构(html)与..._常用的css样式,你知道的有哪些,请标清序号,先用文字说明作用,再写出代码?

《嵌入式程序员应该知道的16个问题》_non volatile embedded data base干嘛用的-程序员宅基地

文章浏览阅读866次。全面解析《嵌入式程序员应该知道的16个问题》 全面解析《嵌入式程序员应该知道的 16 个问题》----Sailor_forever 分析整理, [email protected]://blog.csdn.net/sailor_8318/archive/2008/03/25/2215041.aspx 1、预处理器( Preprocessor)2_non volatile embedded data base干嘛用的

九宫格-程序员宅基地

文章浏览阅读62次。九宫格对于九宫格的设置,我布置了三个xml页面和四个java类。activity_main布局:<?xml version="1.0" encoding="utf-8"?><LinearLayout ="http://schemas.android.com/apk/res/android" xmlns:tools="http://sch..._在fragment怎么应用写的九宫格

asp.net小说网系统VS开发物业sqlserver数据库web结构c#编程计算机网页源码项目_asp.net小说网站项目特色-程序员宅基地

文章浏览阅读602次。一、源码特点 asp.net小说网系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发,开发环境为vs2010,数据库为sqlserver2008,或者以上版本都可以,使用c#语言开发。asp.net物流信息管理系统VS开发物业sqlserver数据库web结构c#编程计算机网页源码项目-管理软件文档类资源-CSDN下载、源码特点asp.net物流信息管理系统是一套完善的web设计管理系统,系统具有完更多下载资源、学习资料请访问CSDN下载频道.h..._asp.net小说网站项目特色