理论教育 HDFS的基本框架探析

HDFS的基本框架探析

时间:2023-06-14 理论教育 版权反馈
【摘要】:图3-1HDFS 架构图NameSpace 负责维护HDFS 文件系统树及树内所有的文件和目录,这些信息以两种形式将文件永久保存在本地磁盘上:命名空间镜像和编辑日志。DataNode 将HDFS 数据以文件块的形式存储在本地文件系统的一个单独的文件中。HDFS 之所以设置这么大,目的是为了减少寻址开销。需要注意的是文件块只是HDFS 中文件分割的单位,并不是数据存储单位。

HDFS的基本框架探析

HDFS 主要由3 个组件构成,分别是Client、NameNode 和DataNode,HDFS 是以主从模式运行的,其中NameNode 运行在master 节点,DataNode 运行在slave 节点,HDFS 架构图如图3-1 所示:

1. Client(客户端)

用户可以通过类似Linux shell 命令行方式或者API 访问HDFS,是用户操作数据的入口。Client 通过与NameNode 交互,获取文件位置信息;与DataNode 交互,实现读取和写入数据。

2. NameSpace(命名空间)

HDFS 采用传统的层次型文件组织结构,其结构和Linux 文件系统很像,都有一个根节点/,所有文件都从该节点延伸而来,整个文件结构类似于树。

图3-1 HDFS 架构图

NameSpace 负责维护HDFS 文件系统树及树内所有的文件和目录,这些信息以两种形式将文件永久保存在本地磁盘上:命名空间镜像(fsimage)和编辑日志(edits)。NameSpace 记录着每个文件块(包括备份文件块)位于哪个DataNode 上,这些信息都保存在内存中,因此每次集群启动时会通过DataNode 汇报重新生成。

NameSpace 由NameNode 负责管理,所有对命名空间的改动(包括创建、删除、重命名,或是改变属性等,但是不包括打开、读取、写入数据)都会被HDFS 记录下来并保存在edits 中。

3. NameNode(名称节点)

在Hadoop1.x 版本只有一个NameNode,在Hadoop2.x 版本可以设置及多个NameNode,但整个Hadoop 集群只有一个NameNode 处于active 状态。NameNode(通常简称为NN)用来管理整个文件系统的命名空间,文件块映射信息,处理来自Client 的文件访问请求(打开、关闭、重命名)和设置文件副本。(www.daowen.com)

由于NameNode 把文件系统的元数据信息保存在内存中,因此文件系统所能容纳的文件数目是由NameNode 所在机器的内存大小决定的,这也决定了Hadoop 集群的DataNode 节点不能无限扩展。一般来说,一个文件、文件夹和文件块需要占据大约150 字节左右的空间,假设集群有100 万个文件,每一个文件占据一个文件块,就至少需要300MB 内存; 如果NameNode 节点内存为64G,集群大概能存储两亿个文件信息。

4. DataNode(数据节点)

DataNode(通常简称为DN)负责存储实际的数据,执行用户对数据的读写请求,响应NameNode 对文件块的创建、删除指令,汇报文件块存储信息给NameNode,以心跳包的形式向NameSpace 发送存储的文件块列表。

DataNode 将HDFS 数据以文件块的形式存储在本地文件系统的一个单独的文件中。实际上,Datanode 不会在同一个目录下创建所有的文件,它采用试探的方法来确定每个目录的最佳文件数目,并且在适当的时候创建子目录。

5. Secondary NameNode(第二名称节点)

帮助NameNode 收集文件系统运行的状态信息,周期性(可以配置)保存NameNode 的元数据(包括fsimage 和edits)。Secondary NameNode 是在文件系统中设置一个检查点来帮助NameNode 更好的工作,但在Hadoop2.x 中采用了HA 来取代它。

6. block(文件块)

为了提高系统的读写效率,HDFS 中采用了文件块作为数据读写单位。一个文件可以分成若干块,每个块可以保存在不同的DataNode 上,这样HDFS 就可以存储比本地磁盘容量大的多的文件,文件块对用户是透明的,用户看到的仍是一个完整文件。

与一般文件系统中大小为几KB 的数据块不同,HDFS 文件块的默认大小是128M(在Hadoop1.0 中是64M),根据实际生产的需要,还可以设置成256M 甚至更大。HDFS 之所以设置这么大,目的是为了减少寻址开销。由于HDFS 存储大文件较多,如果文件块设置太小,就需要读取大量文件块,而文件块又是分布式存储的,会造成硬盘寻址时间比传输时间要长。为了减少寻址时间提高系统吞吐量,文件块不能设置太小。数据表明,如果寻址时间在10 毫秒左右,传输速率是100M/s,为了使寻址时间为传输时间的1%,则需要100M 左右的块大小。文件块大的另一个好处就是一个大文件会由较少的文件块组成,减少NameNode 的内存消耗,增加集群存储文件的数目。

需要注意的是文件块只是HDFS 中文件分割的单位,并不是数据存储单位。比如一个文件为200M,它会被分成两个文件块,一个文件块为128M,另一个文件块为72M 而不是128M。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈