5000字12张图讲解nn内存中的元数据信息

namenode作为hdfs中的元数据的管理模块,免不了会提到元数据包括哪些?在内存中又是如何存储管理的,本文就来聊聊nn内存中的元数据信息。

【整体概况】


在HDFS中,NN的主要作用是元数据管理,包括文件系统目录树的管理、block块的管理、以及dn结点管理。

在具体实现中,FSDirectory对应文件系统目录树的管理,包括文件系统中各个目录、文件信息记录,以及彼此之间的层级关系;

DatanodeManager管理所有注册的dn结点信息,同时根据dn的心跳信息、块汇报更新相关的信息记录。

BlockManager则是nn中最庞大的一部分,内部又拆分成多个类来存储管理块的不同信息和状态。例如使用blocksmap存储所有的块信息,使用underReplicatedBlocks、PendingReplicationBlocks来保证块的副本数始终满足指定个数。

虽然这几个部分分别管理不同的元数据信息,但彼此并不是孤立的,而是相互联系在一起的,例如:

  • 一个文件中需要知道自身数据存储在哪些块中,具体实现中以一个数组记录该文件包含的所有块信息,因此文件和块就关联起来了

  • 同样,一个块的副本分别存储在哪个dn结点的哪个卷目录中,也需要记录下来。这样,当dn结点出现异常,或者dn结点上的卷出现异常时,nn需要对存储在这个dn结点上的块进行副本的迁移保证块的副本数满足指定个数。这样,块信息就和dn的存储信息关联起来了。

下面就这几部分内容分别展开说明。

【文件系统目录树】


在HDFS文件系统中,一个目录或者一个文件,都以一个INode来表示,并且都具有一些相同的属性,例如权限、所属用户/用户组、最后修改时间、最后访问时间等;但两者又有一些不同的地方,例如目录下可以有子目录或文件,而文件则没有这些东西,但文件是有实际存储的数据的,这些数据存储在一个或多个块中。

在具体实现中:

  • 类INodeDirectory对应存储文件系统中的目录信息,INodeFile对应存储文件系统中的文件信息;

  • 两个类均继承自抽象类INodeWithAdditionFields,在这个抽象类中,定义了一些通用的属性(文件/目录的名字、权限、等),feature接口数组包含目录或文件一些扩展的特性,诸如配额、快照、访问控制、扩展属性等;

  • 抽象类INode是所有文件/目录的父类,该类中有一个类成员parent,记录文件/目录的父节点,一方面是可以快速找到每个目录/文件的父目录,另一方面是这些信息会持久化到fsimage中,启动时会根据记录的parent字段,重新在内存中构造出一颗完整的文件目录树;

  • 在INodeDirectory中,类成员child是一个INode的集合,记录该目录下的子目录(不包含递归子目录)和文件;

  • 在INodeFile中,类成员blocks是一个BlockInfo的数组&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值