分布式文件系统的设计目标大概是这么几个:透明性、并发控制、可伸缩性、容错以及安全需求等。我想试试从这几个角度去观察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框架紧密结合。
分享到:
相关推荐
IHDFS系统的设计基于HDFS的分布式架构,通过对HDFS的改进和优化,实现了智能化的分布式文件存储系统。该系统的核心组件包括大数据去重模块、大数据放置模块、大数据智能迁移模块和大数据编码模块等。其中,大数据...
"基于HDFS分布式文件系统的大数据存储优点与功能" 大数据时代,伴随着信息时代的快速发展,数据量的增长速度也在不断增加。为了解决数据存储的问题,世界各国的科学家们不断探索解决方案,涌现出了一些分布式文件...
3. **扩展性**:随着硬件设备的增加,分布式文件系统能够线性扩展其存储容量和处理能力,以应对不断增长的数据需求。 4. **高并发访问**:支持多个客户端同时对同一文件进行读写操作,通过并行处理提高效率。 5. *...
hdfs 分布式文件系统。HDFS是基于流数据模式访问和处理超大文件的需求而开发的,它可以运行于廉价的商用服务器上。总的来说,可以将 HDFS的主要特点概括为以下几点:(1 )处理超大文件 (2 )流式地访问数据 (3...
它是一个分布式文件系统,能够处理大量数据的存储和处理需求。 HDFS架构 HDFS的架构主要包括NameNode和DataNode两个组件。NameNode是Master节点,负责管理命名空间、元数据和Block副本策略。DataNode是Slave节点,...
分布式文件系统HDFS是Hadoop项目中重要的组件之一,它专门设计用于存储大规模数据集,具备高容错性、高吞吐量的特点,并能够在廉价硬件上运行。HDFS借鉴了Google的GFS架构,并在Hadoop环境中实现了类似的功能,用于...
总体而言,开源分布式文件系统是现代大数据存储和处理不可或缺的基础技术,通过不断的技术创新和优化,它持续满足不断增长的数据存储需求,提供高效的数据管理能力。在理解了分布式文件系统的技术原理和设计策略后,...
【标题】:“HDFS分布式文件系统具备的优点共2页.pdf.zip” 【描述】:“HDFS分布式文件系统具备的优点共2页.pdf.zip”这个文件压缩包包含了一份关于HDFS(Hadoop Distributed File System)分布式文件系统优点的...
《HDFS——Hadoop分布式文件系统深度实践》这本书是针对Hadoop分布式文件系统(HDFS)的详尽指南,旨在帮助读者深入理解HDFS的工作原理、设计思想以及在实际应用中的最佳实践。HDFS是Apache Hadoop项目的核心组件之...
注:本文旨在从模型分析的角度探讨Hadoop分布式文件系统的设计特点与优势,以及其在云计算领域的应用前景。通过对HDFS与传统分布式文件系统的对比分析,为研究者提供了深入理解Hadoop分布式文件系统的重要参考。
- **Hadoop HDFS**:针对大数据处理设计的分布式文件系统,能够在廉价的硬件上构建大规模的数据集群。 - **对象存储系统**:如Ceph、GlusterFS等,通过采用对象存储的方式提高了系统的可扩展性和容错能力。 #### 四...
本文将对比五种典型的分布式文件系统,包括HDFS、Ceph、MooseFS、GlusterFS和LustreFS,介绍其基本架构、数据分布和查询处理流程,然后对这些系统的优缺点进行分析,最后给出了在不同场景下如何对分布式文件系统进行...
描述中提到"基于Java的Hadoop分布式文件系统",意味着Hadoop是用Java语言实现的,这使得它可以在任何支持Java的平台上运行。HDFS的设计目标是提供高吞吐量的数据访问,尤其适合大规模数据集的批处理应用。它的设计...
HDFS分布式文件系统 HDFS是构建在基于网络软RAID的分布式存储系统之上的分布式文件系统。它为用户提供单一的文件映像和专用的文件访问接口,使得用户能够轻松地访问分布式存储系统中的数据。HDFS的设计重点在于...
首先介绍分布式文件系统的基本概念、结构和设计需求,然后介绍Hadoop分布式文件系统HDFS,详细阐述它的重要概念、体系结构、存储原理和读写过程,最后,介绍了一些HDFS编程实践方面的知识
分布式文件系统的典型代表有Hadoop的HDFS(Hadoop Distributed File System)、Google的GFS(Google File System)、Apache的Cassandra以及Amazon的S3(Simple Storage Service)。这些系统在设计时都充分考虑了大...