HDFS源码阅读--Namenode文件系统目录树及数据块管理

Namenode

Namenode作为HDFS的主节点:

  1. 文件系统目录树的管理:HDFS第一关系链;
  2. 数据块以及数据节点管理:HDFS第二关系链;
  3. 租约管理;
  4. 缓存管理

一、文件系统目录树

HDFS的命名空间是以“/”为根的整个目录树,是通过FSDirectory来管理的;

不管是目录还是文件,在文件系统目录树中都被看作是一个INode节点;

目录:InodeDirectory;
文件:INodeFile。

HDFS会将命名空间存放在本地文件系统上的一个叫fsimage的文件中,利用这个文件,namenode每次重启都能将命名空间重构。

fsimage由FSImage类负责,同时,对HDFS的各种操作,都会在editlog中记录,以便周期性的合并生成fsimage。

1. INode相关类

1.1 INode类

INode是INodeDirectory和INodeFile的父类。同时实现了INodeAttributes接口:

INodeArrtibutes定义的get方法
	userName:文件/目录所属用户名
	groupName:文件/目录所属组名
	fsPermission:文件/目录访问权限
	aclFeature:安全相关
	modificationTime:文件/目录上次修改时间
	accessTime:上次访问时间
	XAttrFeature:当前目录/文件的扩展属性

INode原信息的方法
	id:INodede id;
	name:文件/目录的名称
	fullPathName:文件/目录的完整路径
	parent:文件/目录的父节点

INode提供的基本判断方法:
	isFile():判断是否为文件
	isDirectory():判断是否为目录
	isSymlink():判断是否为符号链接
	isRoot():判断是否为文件系统目录树的根节点```
1.2 INodeWithAdditionalFields类

INode抽象类只定义了一个字段parent,其余字段的值都靠抽象的get()方法获得,并留给子类定义;

INodeWithAdditionalFields定义字段有:

id, name, permission, modificationTime, accessTime

1.3 INodeDirectory类

抽象了HDFS文件系统中的目录,里面保存了一组文件和其他一些目录。添加了成员变量Children

//使用一个Children字段保存该目录中所有孩子节点的INode对象
private List<INode> children = null

INodeDirectory的方法分为三类:

1.子目录相关的方法:children字段的增、删、改、查。

public boolean addChild(INode node){
   
		//首先找到INode节点在children列表中的位置
		final int low = searchChildren(node.getLocalNameBytes());
		if(low >= 0){
   
			return false;
		}
		//调用addChild()方法将INode节点插入到children列表的low位置
		addChild(node, low);
		return true;
	}

	public boolean removeChild(final INode child){
   
		//找到INode节点在children列表中的位置
		final int i = searchChildren(child.getLocalNameBytes());
		if( i < 0){
   
			return false;
		}
		//从children列表中删除
		final INode removed = children.remove(i<
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值