通过对分布式文件系统和Hadoop文件系统在模型和体系架构方面的分析,可以发现,HDFS在设计和实现时都充分考虑了海量数据在存储和管理等方面的需求,并最终获得了系统的高可扩展性、高可靠性和高性能,满足了云计算领域相关用户的需求。
随着网络技术的飞速发展,许多企业和团体通过数据存储服务提供商进行数据的存储、计算和交互。Hadoop是Apache基金会资助的开源项目,其文件系统HDFS具有的海量、高可扩展性、高可靠性、高性能等面向云计算领域应用的重要特征。文章通过在PC上安装HDFS,构建了分布式环境,通过实验证明了Hadoop文件系统在大数据量情况下的性能优势。
Hadoop文件系统(HDFS)是一个运行在普通的硬件之上的分布式文件系统,它和现有的分布式文件系统有着很多的相似性,然而和其他分布式文件系统的区别也是很明显的,HDFS是高容错性的,可以部署在低成本的硬件之上,HDFS提供高吞吐量应对应用程序数据访问,它适合大数据集的应用程序,HDFS放开一些POSIX的需求去实现流式地访问文件数据,HDFS开始是为开源的apache项目nutch的基础结构而创建,HDFS是Hadoop项目的一部分,而Hadoop又是lucene的一部分。HDFS在设计的时候就考虑到平台的可移植性。这种特性方便了HDFS作为大规模数据应用平台的推广。本文对Hadoop文件系统进行深入的研究,分析其在不同数据量下的性能。
1、分布式文件系统模型
分布式文件系统是分布式系统的关键技术之一,能够以文件的方式实现信息资源的共享。在云计算环境中,分布式文件系统承担着为用户提供文件服务的重任,它要保证用户在访问、保存在云中的文件时能够获得接近甚至在某些方面超出其在使用本地磁盘时的服务质量(包括性能、可靠性等)。
分布式文件系统通过网络为用户提供远程文件服务,它的设计目标是要使得用户感知不到其访问的是存储在远程服务器中的文件。因此,分布式文件系统的设计特别强调系统对用户的透明性。满足用户的透明性需求对于分布式文件系统设计非常关键,直接影响了用户对远程文件的访问体验。除此以外,还有其他一些设计需求,包括分布式文件系统需要具有高可用性,能够支持异构客户端的并发访问,能够提供文件数据的多个拷贝并保证文件数据的一致性和安全性等。
针对这些需求,已经有数量众多的分布式文件系统被提出,它们在设计和实现上各具特点。为能够对这些文件系统进行分析和比较,提出了分布式文件系统的远程文件服务模型。该文件服务模型得到了学术界和产业界的广泛认同,主要由扁平文件(FlatFile)服务、目录服务和客户端模块3部分组成。其中,扁平文件服务实现对服务器磁盘上保存的文件内容的操作,负责创建、删除文件以及读写文件的内容和属性,为每个文件创建惟一的文件标识符供后续操作时引用;目录服务实现的是文件的文本名字与其对应标识符之间的映射,负责目录的创建、删除以及目录中文件的增删和查找,生成的目录也是以文件方式保存并由扁平文件服务负责管理;客户端模块则是运行在客户端上,负责封装对扁平文件服务和目录服务的访问,提供了从客户端本地文件系统的文件操作接口到远程服务器的相关功能调用的映射。扁平文件服务和目录服务向客户端模块提供高效、基于网络通信的调用接口,这些接口的功ttli够组成完备的文件操作集合。客户端模块将这些操作接口进一步封装,再以与常规的本地文件操作接口接近的方式提供给应用程序,尽量减少远程文件存放对用户应用程序执行造成的影响,实现透明化。
2、Hadoop文件系统分析
2.1 Hadoop文件系统架构
HDFS采用master/slave架构。一个HDFS集群是有一个Namenode和一定数目的Datanode组成,如图1所示。Namenode是一个中心服务器,负责管理文件系统的namespace和客户端对文件的访问。Datanode在集群中一般是一个节点一个,负责管理节点上它们附带的存储。在内部,一个文件其实分成一个或多个block,这些block存储在Datanode集合里。Namenode执行文件系统的namespace操作,例如打开、关闭、重命名文件和目录,同时决定block至l具体Datanode节点的映射。Datanode在Namenode的指挥下进行block的创建、删除和复制。Namenode矛lDatanode都是设计成可以跑在普通的、廉价的、运行Linux的机器上。HDFS采用java语言开发,因此可以部署在很大范围的机器上。一个典型的部署场景是一台机器跑一个单独的Namenode节点,集群中的其他机器各跑一个Datanode实例。这个架构并不排除一台机器上跑多个Datanode,不过这比较少见。