赞
踩
参考书目:人民邮电出版社《大数据技术》
分布式文件系统(Distributed File System)是一种通过网络连接多台主机并在这些主机上进行分布式文件存储的文件系统,目前被广泛应用的有GFS和HDFS
若干主机放在机架上,若干机架通过交换机相连共同构成的一个计算机集群通常可用于分布式文件系统。
在windows或者Linux操作系统中,文件系统会把磁盘空间划分为固定大小的一块,被称为“磁盘块”,文件系统中“块”的大小通常是磁盘块大小的整数倍,以便于读写。当一个文件小于数据块,他也会完整占用整个数据块。
分布式文件系统也有块的概念,只是在普通操作系统中,一个块通常比较小,是以字节为单位的,但是对于分布式文件系统,比如HDFS,一个块默认为64MB,而且如果一个文件大小小鱼一个数据块时,他也不单独完全占用一个数据块。
分布式文件系统在物理层面上由一个个节点组成,这些节点分为两类,一类叫做“主节点”/“名称节点”,另外一种叫做“从节点”/“数据节点”。主节点会负责一些重要的关乎大局的事务,比如文件和目录的创建删除重命名等,以及存储了数据节点和文件之间的映射关系,数据节点负责数据的存储,其他概不负责。
在数据的读写过程中,流程往往是这样的:
透明性、并发控制、文件复制、硬件和操作系统的异构性、可伸缩性、容错、安全需求
HDFS原来是Apache Nutch搜索引擎的一部分,后来独立成为一个子项目,并和MapReduce一起成为Hadoop的核心组成部分。HDFS支持流数据读取和处理超大规模文件,并且可以在廉价的普通机器组成的集群上部署和使用,其被要求实现以下目标:(特点)
传统的文件系统中,为了提高磁盘读写利用率,通常会把按照一定的大小把需要读写的文件分成一个一个的块,每次读写一个数据块,这样做可以避免每次数据读写大小不一致造成的资源浪费。
HDFS默认的一个块为64MB,明显大于传统文件系统,这是因为HDFS定位是处理大数据,采用较大的数据块可以减少磁盘寻道开销。具有以下好处:
名称节点负责管理分布式文件系统的命名空间,保存了FsImage和EditLog两个数据结构:
当EditLog记录过多操作之后,会导致EditLog文件也变大,进而影响到系统效率,于是产生了第二名称节点,可以完成EditLog和FsImage的合并操作,形成新的FsImage文件。具体过程如下:
HDFS采用了主从结构模型,包含一个名称节点和若干个数据节点,每个数据节点会周期性的向名称节点发送“心跳”信号报告自己的状态,如果没有按时发送报告信息,则这个数据节点会被标记为“死机”不会再给这个数据节点分配IO请求。
对用户来说,HDFS可以使用文件名去存储和访问文件,虽然一个文件会被分为若干份分布存储到若干个数据节点上。
客户端访问文件前,把文件名发送给名称节点,名称节点会根据文件名查询数据对应存储的数据块,并把数据节点的位置发送给客户端,客户端直接访问数据节点获取数据,在此过程中,数据节点不参与数据的传输,这样可以让数据节点并发访问,提高数据访问速度。用户数据不会经过名称节点,这样大大减轻了中心服务器的负担,方便数据管理。
HDFS的命名空间包含目录、文件和块,命名空间管理是指命名空间支持对HDFS中的目录、文件和块做类似文件系统的创建、修改、删除等基本操作。
客户端与名称节点直接使用TCP/IP协议连接,名称节点和数据节点之间使用数据节点协议进行交互,客户端与数据节点之间使用远程调用RPC实现。
客户端不算HDFS的一部分
HDFS通过设置一个名称节点的方式,简化了系统设计,但是也造成了以下明显的局限性:
HDFS采用了多副本方式对数据进行冗余存储,一个数据块的多个副本会被放置在不同机架的不同的数据节点上,一般是三个,他有以下优点:
名称节点出错:
FileSystem是一个通用文件系统的抽象类,可以被分布式文件系统继承,所有可能使用Hadoop文件系统的代码都要使用这个类(java语言)。
DistributedFileSystem时FileSystem在HDFS中的实现。
FileSystem中的open()方法返回的是一个输入流FSDataInputStream对象,在HDFS中具体的输入流就是DFSInputStream。
FileSystem中的create()方法返回的是一个输出流FSDataOutputStream对象,在HDFS中具体的输出流就是DFSOutputStream。
简单来说吧
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。