`

从HDFS看分布式文件系统的设计需求

    博客分类:
  • java
阅读更多

    分布式文件系统的设计目标大概是这么几个:透明性、并发控制、可伸缩性、容错以及安全需求等。我想试试从这几个角度去观察HDFS的设计和实现,可以更清楚地看出HDFS的应用场景和设计理念。
    首先是透明性,如果按照开放分布式处理的标准确定就有8种透明性:访问的透明性、位置的透明性、并发透明性、复制透明性、故障透明性、移动透明性、性能透明性和伸缩透明性。对于分布式文件系统,最重要的是希望能达到5个透明性要求:
1)访问的透明性:用户能通过相同的操作来访问本地文件和远程文件资源。HDFS可以做到这一点,如果HDFS设置成本地文件系统,而非分布式,那么读写 分布式HDFS的程序可以不用修改地读写本地文件,要做修改的是配置文件。可见,HDFS提供的访问的透明性是不完全的,毕竟它构建于java之上,不能 像NFS或者AFS那样去修改unix内核,同时将本地文件和远程文件以一致的方式处理。
2)位置的透明性:使用单一的文件命名空间,在不改变路径名的前提下,文件或者文件集合可以被重定位。HDFS集群只有一个Namenode来负责文件系 统命名空间的管理,文件的block可以重新分布复制,block可以增加或者减少副本,副本可以跨机架存储,而这一切对客户端都是透明的。
3)移动的透明性,这一点与位置的透明性类似,HDFS中的文件经常由于节点的失效、增加或者replication因子的改变或者重新均衡等进行着复制或者移动,而客户端和客户端程序并不需要改变什么,Namenode的edits日志文件记录着这些变更。
4)性能的透明性和伸缩的透明性:HDFS的目标就是构建在大规模廉价机器上的分布式文件系统集群,可伸缩性毋庸置疑,至于性能可以参考它首页上的一些benchmark。

    其次是并发控制,客户端对于文件的读写不应该影响其他客户端对同一个文件的读写。要想实现近似原生文件系统的单个文件拷贝语义,分布式文件系统需要做出复 杂的交互,例如采用时间戳,或者类似回调承诺(类似服务器到客户端的RPC回调,在文件更新的时候;回调有两种状态:有效或者取消。客户端通过检查回调承 诺的状态,来判断服务器上的文件是否被更新过)。HDFS并没有这样做,它的机制非常简单,任何时间都只允许一个写的客户端,文件经创建并写入之后不再改 变,它的模型是 write-one-read-many , 一次写,多次读。这与它的应用场合是一致,HDFS的文件大小通常是兆至T级的,这些数据不会经常修改,最经常的是被顺序读并处理,随机读很少,因此 HDFS非常适合MapReduce框架或者web crawler应用。HDFS文件的大小也决定了它的客户端不能像某些分布式文件系统那样缓存常用到的几百个文件。

    第三,文件复制功能,一个文件可以表示为其内容在不同位置的多个拷贝。这样做带来了两个好处:访问同个文件时可以从多个服务器中获取从而改善服务的伸缩 性,另外就是提高了容错能力,某个副本损坏了,仍然可以从其他服务器节点获取该文件。HDFS文件的block为了容错都将被备份,根据配置的 replication因子来,默认是3。副本的存放策略也是很有讲究,一个放在本地机架的节点,一个放在同一机架的另一节点,另一个放在其他机架上。这 样可以最大限度地防止因故障导致的副本的丢失。不仅如此,HDFS读文件的时候也将优先选择从同一机架乃至同一数据中心的节点上读取block。

    第四,硬件和操作系统的异构性。由于构建在java平台上,HDFS的跨平台能力毋庸置疑,得益于java平台已经封装好的文件IO系统,HDFS可以在不同的操作系统和计算机上实现同样的客户端和服务端程序。

    第五,容错能力,在分布式文件系统中,尽量保证文件服务在客户端或者服务端出现问题的时候能正常使用是非常重要的。HDFS的容错能力大概可以分为两个方面:文件系统的容错性以及Hadoop本身的容错能力。文件系统的容错性通过这么几个手段:
1)在Namenode和Datanode之间维持心跳检测,当由于网络故障之类的原因,导致Datanode发出的心跳包没有被Namenode正常收 到的时候,Namenode就不会将任何新的IO操作派发给那个Datanode,该Datanode上的数据被认为是无效的,因此Namenode会检 测是否有文件block的副本数目小于设置值,如果小于就自动开始复制新的副本并分发到其他Datanode节点。
2)检测文件block的完整性,HDFS会记录每个新创建的文件的所有block的校验和。当以后检索这些文件的时候,从某个节点获取block,会首先确认校验和是否一致,如果不一致,会从其他Datanode节点上获取该block的副本。
3)集群的负载均衡,由于节点的失效或者增加,可能导致数据分布的不均匀,当某个Datanode节点的空闲空间大于一个临界值的时候,HDFS会自动从其他Datanode迁移数据过来。
4)Namenode上的fsimage和edits日志文件是HDFS的核心数据结构,如果这些文件损坏了,HDFS将失效。因而, Namenode可以配置成支持维护多 个 FsImage Editlog的拷贝。任何对 FsImage或者 Editlog的修改,都将同步到它们的副本上。 它总是选取最近的一致的 FsImage Editlog使用。 Namenode HDFS是单点存在,如果 Namenode所在的机器错误,手工的干预是必须的。
5)文件的删除,删除并不是马上从Namenode移出namespace,而是放在/ trash目录随时可恢复,直到超过设置时间才被正式移除。
    再说Hadoop本身的容错性,Hadoop支持升级和回滚,当升级Hadoop软件时出现bug或者不兼容现象,可以通过回滚恢复到老的Hadoop版本。
    最后一个就是安全性问题,HDFS的安全性是比较弱的,只有简单的与unix文件系统类似的文件许可控制,未来版本会实现类似NFS的kerberos验证系统。

    总结下:HDFS作为通用的分布式文件系统并不适合,它在并发控制、缓存一致性以及小文件读写的效率上是比较弱的。但是它有自己明确的设计目标,那就是支 持大的数据文件(兆至T级),并且这些文件以顺序读为主,以文件读的高吞吐量为目标,并且与MapReduce框架紧密结合。
 

17
2
分享到:
评论
4 楼 tobeno1 2009-09-09  
很清晰,厉害!
3 楼 dennis_zane 2008-08-18  
@geradle

blogjava上的killme2008即是我,两处都发
2 楼 geradle 2008-08-17  
拷贝,粘帖。
1 楼 fire01312 2008-08-17  
谢谢了 拜读过了

相关推荐

    HDFS分布式文件系统(1).pdf

    hdfs 分布式文件系统。HDFS是基于流数据模式访问和处理超大文件的需求而开发的,它可以运行于廉价的商用服务器上。总的来说,可以将 HDFS的主要特点概括为以下几点:(1 )处理超大文件 (2 )流式地访问数据 (3...

    Chapter3-厦门大学-林子雨-大数据技术原理与应用-第三章-分布式文件系统HDFS(2016年1月26日版本)

    首先介绍分布式文件系统的基本概念、结构和设计需求,然后介绍Hadoop分布式文件系统HDFS,详细阐述它的重要概念、体系结构、存储原理和读写过程,最后,介绍了一些HDFS编程实践方面的知识

    厦门大学-林子雨-大数据技术原理与应用(第2版教材)-第3章-分布式文件系统HDFS

    内容提要:首先介绍分布式文件系统的基本概念、结构和设计需求,然后介绍Hadoop分布式文件系统HDFS,详细阐述它的重要概念、体系结构、存储原理和读写过程,最后,介绍了一些HDFS编程实践方面的知识。

    大数据课设——分布式文件管理系统(HDFS)和HBase操作管理

    主题为分布式文件管理系统(HDFS)和HBase操作管理,附有完整的项目工程代码和相应的报告。 一般性的需求有: 使用VMware虚拟机软件,安装和配置Centos操作系统。 设置hosts域名访问路径和关闭防火墙 设置SSH免...

    Chapter3-厦门大学-林子雨-大数据技术原理与应用-第三章-分布式文件系统HDFS(新)

    首先介绍分布式文件系统的基本概念、结构和设计需求,然后介绍Hadoop分布式文件系统HDFS,详细阐述它的重要概念、体系结构、存储原理和读写过程,最后,介绍了一些HDFS编程实践方面的知识

    基于Spark Streaming将图片以流的方式写入HDFS分布式文件系统.zip

    资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!! 本资源中的源码都是经过本地...

    Hadoop之详解HDFS架构

    Hadoop包含三大基本组件:HDFS——分布式文件系统,用于数据存储YARN——统一资源管理和调度系统,用于管理集群的计算资源并根据计算框架的需求进行调度,支持包含MapReduce、Spark、Flink等多种计算框架。...

    这些主流分布式存储系统,你都知道吗?

    Hadoop分布式文件系统(HDFS)是一个分布式文件系统,适用于商用硬件上高数据吞吐量对大数据集的访问的需求。该系统仿效了谷歌文件系统(GFS),数据在相同节点上以复制的方式进行存储以实现将数据合并计算的目的。该...

    HDFS及操作方法

    分布式文件管理系统(HDFS)介绍,Hadoop 项目的核心子项目,是分布式计算中数 据存储管理的基础,是基于流数据模式访问和 处理超大文件的需求而开发的,可以运行于廉 价的商用服务器上

    基于Hadoop的海量交易记录查询系统研究

    Hadoop 云计算框架中的 HDFS 分布式文件系统和 HBase 分布式数据库,分别介绍了 HDFS 的特性、系统框架、副本存放策略和 HBase 的系统框架及数据模型。其次,重点分析了 HBase 的存储特点,通过分析 HBase 的数据...

    百度文件系统 BFS-Baidu.zip

    现有的分布式文件系统(如HDFS等)无法满足低延迟、高可用、跨地域扩展等方面的需求,所以我们从百度搜索的业务特点出发,开发了自己的分布式文件系统BFS。 设计目标 高可靠、高可用通过将数据副本进行多机房、多...

    基于云计算和Hadoop的网络舆情监控系统设计

    基于Hadoop技术设计了系统的数据采集和数据处理模块,架构了数据存储的Hdfs分布式文件管理体系,实现了舆情数据信息的高效存储;使用云计算中的MapReduce编程模型和语义分析算法实现了话题发现与舆情分析模块,从而...

    大数据企业实训项目:基于SpringMVC+Spring+HBase+Maven搭建的Hadoop分布式云盘系统.zip

    使用Hadoop HDFS作为文件存储系统、HBase作为数据存储仓库,采用SpringMVC+Spring框架实现,包括用户注册与登录、我的网盘、关注用户 毕业设计是高等教育阶段学生在完成学业前所进行的一项重要学术任务,旨在检验...

    Hbase+Spring boot实战分布式文件存储

    12-1 Bucket管理模块开发 12-2 HDFS和HBASE操作类1 12-3 HDFS和HBASE操作类2 12-4 Hos文件管理模块实体类开发 12-5 Hos创建删除Bucket方法开发 12-6 Hos上传文件方法开发 12-7 Hos获取文件方法开发 12-8 Hos删除...

    HBase分布式架构处理大数据量(高并发和实时处理)

    HDFS(HadoopDistributedFileSystem)分布式文件管理系统、是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。...

    Fourinone分布式并行计算四合一框架

     但是fourinone并不提供一个分布式存储系统,比如文件数据的导入导出、拆分存储、负载均衡,备份容灾等存储功能,不过开发人员可以利用这些api去设计和实现这些功能,用来满足自己的特定需求。  二、自动化class...

    使用HADOOP分布式文件系统(HDFS)进行电子商务营销策略的数据挖掘-研究论文

    通过动态地根据用户的需求和兴趣定制网站的外观,感觉和内容,从Web数据中挖掘信息可以帮助个性化用户的浏览体验。 在通过研究仔细研究了用于数据挖掘的现有算法之后,研究人员提出了一种有效的算法,用于挖掘多...

    基于Hadoop的煤矿数据中心架构设计

    采用Hadoop分布式文件系统(HDFS)实现文件的可靠存储,并采用HBase分布式存储数据库实现历史数据的持久化存储,利用其无模式稀疏设计满足同一时空坐标体系下的数据分析需求;采用Redis作为实时数据库存储数据快照...

Global site tag (gtag.js) - Google Analytics