HDFS源码之INode相关类

快照:http://f.dataguru.cn/thread-574962-1-1.html

第一部分主要有五个类INode,INodeAttributes,INodeFile,INodeDirectory,INodeReference,INodeSymlink

(符号链接,可以将分布式缓存DistributedCache的文件连接到当前工作路径)

1、INode实现类类图

INodeFile继承INodeWithAdditionalFileds类, INodeDirectory继承INodeWithAdditionalFileds实现INode类

(1).INode类方法

实现INodeAttributes

INode元信息get set,其他基本的判断方法

INode类采用设计模式中的模板模式,模板方法是final类型,不可以继承,供接口调用

(2).INode类字段

只有一个字段parent,表示当前INode的父目录,父目录只能是INodeDirectory或INodeReference

2、INodeWithAdditionalFields类

(1).INodeWithAdditionalFields继承INode抽象类,重写INode的抽象方法,例如getId(), getUserName()等

特殊字段permission features

3、INodeDirectory类

属性:

children: List<Node> 把保存一组文件和其他目录

方法:

子目录相关方法  children字段的CRUD方法

特性feature相关方法

快照 SnapShot相关方法

4、INodeFile类

属性:

long  header 文件头信息,保存当前文件有多少副本,文件数据块大小(内部类HeaderFormat类处理,类似INodeWithAdditionalFields的permissions处理方法)

BlockInfo []  blocks 数据块信息,保存数据块与文件,数据块与数据节点的对应关系

方法:(类图查看)

UnderConstruction特性相关方法

SnapShot相关方法

其他:header修改,获取方法;blocks数组字段的操作

5、INodeReference类

INode引用类,文件/目录被重命名或者移动其他目录的时候,会存在多条访问路径,INodeReference处理这个问题

属性:

时间: 2024-08-25 04:06:54

HDFS源码之INode相关类的相关文章

Hadoop HDFS源码分析 关于数据块的类

Hadoop HDFS源码分析 关于数据块的类 1.BlocksMap 官方代码中的注释为: /** * This class maintains the map from a block to its metadata. * block's metadata currently includes blockCollection it belongs to and * the datanodes that store the block. */ BlocksMap数据块映射,管理名字节点上的数据

cocos2d-x 源码分析 : control 源码分析 ( 控制类组件 controlButton)

源码版本来自3.1rc 转载请注明 cocos2d-x源码分析总目录 http://blog.csdn.net/u011225840/article/details/31743129 1.继承结构 control的设计整体感觉挺美的,在父类control定义了整个控制事件的基础以及管理,虽然其继承了Layer,但其本身和UI组件的实现并没有关联.在子类(controlButton,controlSwitch,controlStepper等中实现不同的UI组件).下面通过源码来分析control与

HDFS源码分析之LightWeightGSet

LightWeightGSet是名字节点NameNode在内存中存储全部数据块信息的类BlocksMap需要的一个重要数据结构,它是一个占用较低内存的集合的实现,它使用一个数组array存储元素,使用linked lists来解决冲突.它没有实现重新哈希分区,所以,内部的array不会改变大小.这个类不支持null元素,并且不是线程安全的.它在BlocksMap中的初始化如下: this.blocks = new LightWeightGSet<Block, BlockInfo>(capaci

HDFS源码分析EditLog之读取操作符

在<HDFS源码分析EditLog之获取编辑日志输入流>一文中,我们详细了解了如何获取编辑日志输入流EditLogInputStream.在我们得到编辑日志输入流后,是不是就该从输入流中获取数据来处理呢?答案是显而易见的!在<HDFS源码分析之EditLogTailer>一文中,我们在讲编辑日志追踪同步时,也讲到了如下两个连续的处理流程: 4.从编辑日志editLog中获取编辑日志输入流集合streams,获取的输入流为最新事务ID加1之后的数据 5.调用文件系统镜像FSImage

HDFS源码分析数据块校验之DataBlockScanner

DataBlockScanner是运行在数据节点DataNode上的一个后台线程.它为所有的块池管理块扫描.针对每个块池,一个BlockPoolSliceScanner对象将会被创建,其运行在一个单独的线程中,为该块池扫描.校验数据块.当一个BPOfferService服务变成活跃或死亡状态,该类中的blockPoolScannerMap将会更新. 我们先看下DataBlockScanner的成员变量,如下: // 所属数据节点DataNode实例 private final DataNode

ThinkPHP6源码:从Http类的实例化看依赖注入是如何实现的

ThinkPHP 6 从原先的 App 类中分离出 Http 类,负责应用的初始化和调度等功能,而 App 类则专注于容器的管理,符合单一职责原则. 以下源码分析,我们可以从 App,Http 类的实例化过程,了解类是如何实现自动实例化的,依赖注入是怎么实现的. 从入口文件出发 当访问一个 ThinkPHP 搭建的站点,框架最先是从入口文件开始的,然后才是应用初始化.路由解析.控制器调用和响应输出等操作. 入口文件主要代码如下: // 引入自动加载器,实现类的自动加载功能(PSR4标准) //

Hadoop源码分析(2)——Configuration类

这篇文章主要介绍Hadoop的系统配置类Configuration. 接着上一篇文章介绍,上一篇文章中Hadoop Job的main方法为: public static void main(String[] args) throws Exception { int res = ToolRunner.run(new Configuration(), new CalculateSumJob(),args); System.exit(res); } 其中ToolRunner.run方法传入的第一个变量

神经网络caffe框架源码解析--softmax_layer.cpp类代码研究

// Copyright 2013 Yangqing Jia // #include <algorithm> #include <vector> #include "caffe/layer.hpp" #include "caffe/vision_layers.hpp" #include "caffe/util/math_functions.hpp" using std::max; namespace caffe { /**

神经网络caffe框架源码解析--data_layer.cpp类代码研究

dataLayer作为整个网络的输入层, 数据从leveldb中取.leveldb的数据是通过图片转换过来的. 网络建立的时候, datalayer主要是负责设置一些参数,比如batchsize,channels,height,width等. 这次会通过读leveldb一个数据块来获取这些信息. 然后启动一个线程来预先从leveldb拉取一批数据,这些数据是图像数据和图像标签. 正向传播的时候, datalayer就把预先拉取好数据拷贝到指定的cpu或者gpu的内存. 然后启动新线程再预先拉取数