设为首页 收藏本站
查看: 1056|回复: 0

[经验分享] Hadoop-INode的相关分析

[复制链接]

尚未签到

发表于 2016-12-9 11:11:49 | 显示全部楼层 |阅读模式
2.1 文件系统中INODE的基本概念
inode译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。inode分为内存中的inode和文件系统中的inode,为了避免混淆,称前者为VFS inode 而后者以EXT2为代表,称为Ext2 inode。下面分别对VFS inodeExt2 inode做一下简单的描述:
(1) VFS inode包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。它是linux管理文件系统的最基本单位,也是文件系统连接任何子目录、文件的桥梁。inode结构中的静态信息取自物理设备上的文件系统,由文件系统指定的函数填写,它只存在于内存中,可以通过inode缓存访问。虽然每个文件都有相应的inode结点,但是只有在需要的时候系统才会在内存中为其建立相应的inode数据结构,建立的inode结构将形成一个链表,我们可以通过遍历这个链表去得到我们需要的文件结点,VFS也为已分配的inode构造缓存和哈希表,以提高系统性能。inode结构中的struct inode_operations *i_op为我们提供了一个inode操作列表,通过这个列表提供的函数我们可以对VFS inode结点进行各种操作。每个inode结构都有一个i结点号i_ino,在同一个文件系统中每个i结点号是唯一的。
(2) EXT2 inode用来定义文件系统的结构以及描述系统中每个文件的管理信息,每个文件都有且只有一个inode,即使文件中没有数据,其索引结点也是存在的。每个文件用一个单独的Ext2 inode结构来描述,而且每一个inode都有唯一的标志号。Ext2 inode为内存中的inode结构提供了文件的基本信息,随着内存中inode结构的变化,系统也将更新Ext2 inode中相应的内容。Ext2 inode对应的是Ext2_inode结构。
2.2 INODE
INODE类是一个抽象类,主要用于表示File/Directory的层次关系。
它为它的实现类定义了一系列的protected方法,它们包括:setPermissionStatus();设置文件的权限、getPermissionStatus();得到文件的权限、updatePermissionStatus();修改文件的权限。得到用户、设定用户等等。
同时还有部分抽象方法。如:abstract boolean isDirectory();用来判定这个INode是目录还是文件。abstract int collectSubtreeBlocksAndClear(List<Block> v);用于返回这个子树的所有文件数,当这个INode被删除的时候,清除这个子树下面的所有引用。
还有一些default方法。如void setLocalName(String name)设置文件名,得到INode的最后一次修改时间。INodeDirectory getParent();得到一个父的INodelong getModificationTime()。得到最后一次的修改时间。
INodeDirectoryINodeFileINode的两个主要实现类。这部分主要应用了合成模式,INodeFile是叶子节点,它没有内部的树结构。而INodeDirectory是树枝节点,它还可以包含子树。
INode的相关类如下所示:

DSC0000.jpg

2.3 INodeDirectory
INodeDirectory主要定义了一个INodeFile的目录结构,它有几个常用的构造函数
INodeDirectory(String name, PermissionStatus permissions)INodeDirectory (Permission Status permissions, long mTime) 其中long mTime是最后的修改时间。INodeDirectory(INodeDirectory other)这个构造函数的作用是,直接把当前目录复制成其它的目录。
问题4:int getExistingPathINodes(byte[][] components, INode[] existing)其中的components是一个二维数组,为什么要弄成byte型的?existing这个一维数组存储的是当前INode的路径么,为什么要限制这个数组的大小(难道是由于先前设定的子目录的个数)?这个函数返回的是现在存活的INode的节点的个数?
INode[] getExistingPathINodes(String path) 函数中调用了this.getExistingPathINodes(components, inodes); 它又不返回个值,不是白调用了?
假设路径是/c1/c2/c3 根据/分隔成c1c2c3 这时String[] str1[0]=c1 ,str2[1]=c2, str3[2]=c3 static byte[][] getPathComponents(String[] strings)再把这一组String转化为byte[][]的二维数组。
2.4 INodeDirectoryWithQuota
INodeDirectoryWithQuotaINodeDirectory的子类,它有一些定量的限制,如一个文件夹中的子文件夹的数量的限制
2.5 INodeFile
INodeFile中有三个最为重要的元数据,它们分别是:
protected BlockInfo blocks[] = null;//这个INodeFile所包含的块
protected short blockReplication;//复制的次数
protected long preferredBlockSize;//可以看出是对Block大小的一个定义
猜想:其中,blocks是一个BlockInfo的数组,它用来指向这个文件所在的第一个Block,而每一个Block又有三个指针域,这样通过链式的结构就能够完整地读取一个文件了。
这个类中大都是一些对这个文件所属的Block的操作,比较容易理解。
2.6 INodeFileUnderConstruction
这个类是INodeFile的子类,它表示的是正在构造中的INodeFileINodeFileINodeFileUnderConstruction这两个类中共有两个比较有意思的方法它们分别是:
INodeFileUnderConstruction toINodeFileUnderConstruction()INodeFile convert ToInodeFile()它们的作用分别是把一个INodeFile变为UnderConstruction和把一个INodeFileUnderConstruction变为一个INodeFile

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-311926-1-1.html 上篇帖子: Hadoop集群参数配置原则 下篇帖子: Hadoop-Block的相关分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表