下面我们来分析FSDirectory。其实分析FSDirectory 最好的地方,应该是介绍完INode*以后,FSDirectory 在INode*的基础
上,保存了HDFS 的文件目录状态。系统加载FSImage 时,FSImage 会在FSDirectory 对象上重建文件目录状态,HDFS 文件目录
状态的变化,也由FSDirectory 写日志,同时,它保存了文件名数据块的映射关系。
FSDirectory 只有很少的成员变量,如下:
finfinal FSNamesystem namesystem;
final INodeDirectoryWithQuota rootDir;
FSIma ge fsImage;
boolean ready = false;
其中,namesystem,fsImage 是指向FSNamesystem 对象和FSImage 对象的引用,rootDir 是文件系统的根,ready 初值为false,
当系统成功加载FSImage 以后,ready 会变成true,FSDirectory 的使用者就可以调用其它FSDirectory 功能了。
FSDirectory 中剩下的,就是一堆的方法(我们不讨论和MBean 相关的类,方法和过程)。

loadFSImage 用于加载目录树结构,它会去调用FSImage 的方法,完成持久化信息的导入以后,它会把成员变量ready 置为true。
系统调用loadFSImage 是在FSNamesystem.java 的initialize 方法,那是系统初始化重要的一步。
addFile 用于创建文件或追加数据时创建INodeFileUnderConstruction,下图是它的Call Hierachy 图:

addFile 首先会试图在系统中创建到文件的路径,如果文件为/home/hadoop/Hadoop.tar,addFile 会调用mkdirs(创建路径为
/home/hadoop,这也会涉及到一系列方法),保证文件路径存在,然后创建INodeFileUnderConstruction 节点,并把该节点加
到目录树中(通过addNode,也是需要调用一系列方法),如果成功,就写操作日志(logOpenFile)。
unprotectedAddFile 也用于在系统中创建一个目录或文件(非UnderConstruction),如果是文件,还会建立对应的block。
FSDirectory 中还有好几个unprotected*方法,它们不检查成员变量ready,不写日志,它们大量用于loadFSEdits 中(这个
时候ready 当然是false,而且因为正在恢复日志,也不需要写日志)。
addToParent 添加一个INode 到目录树中,并返回它的上一级目录,它的实现和unprotectedAddFile 是类似的。
persistBlocks 比较有意思,用于往日志里记录某inode 的block 信息,其实并没有一个对应于persistBlocks 的写日志方法,
它用的是logOpenFile。这个大家可以去检查一下logOpenFile 记录的信息。closeFile 对应了logCloseFile。
addBlock 和removeBlock 对应,用于添加/删除数据块信息,同时它们还需要更新FSNamesystem.java 中对应的信息。
unprotectedRenameTo 和renameTo 实现了UNIX 的mv 命令,主要的功能都在unprotectedRenameTo 中完成,复杂的地方在于对
各种各样情况的讨论。
setReplication 和unprotectedSetReplication 用于更新数据块的副本数,很简单的方法,注意,改变产生的对数据块的删除
/复制是在FSNamesystem.java 中实现。
setPermission,unprotectedSetPermission,setOwner 和unprotectedSetOwner 都是简单的方法。
Delete 和unprotectedDelete 又是一对方法,删除如果需要删除数据块,将通过FSNamesystem 的removePathAndBlocks 进行。

……(后续的方法和前面介绍的,都比较类似,都是一些过程性的东西,就不再讨论了)

更多精彩内容请关注:http://bbs.superwu.cn

关注超人学院微信二维码:

关注超人学院java免费学习交流群:

转载于:https://blog.51cto.com/crxy2013/1656415

Hadoop 源代码分析(二三)FSDirectory相关推荐

  1. Hadoop源代码分析

    http://wenku.baidu.com/link?url=R-QoZXhc918qoO0BX6eXI9_uPU75whF62vFFUBIR-7c5XAYUVxDRX5Rs6QZR9hrBnUdM ...

  2. Hadoop源代码分析 - MapReduce(转载)

    1. Hadoop源代码分析(MapReduce概论) http://caibinbupt.javaeye.com/blog/336467

  3. Hadoop源代码分析(完整图文版) part 1

    在网上看到了很多此文章的装载,但是都是纯文字,这篇文章在没有图片的情况下阅读起来意义不大了.花了点时间上传了100多张图片,希望对大家学习hadoop有帮助. Hadoop源代码分析(一) 关键字:  ...

  4. Hadoop源代码分析(完整版)

    Hadoop源代码分析(一) 关键字: 分布式云计算 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施.  GoogleCluster:http:/ ...

  5. Hadoop源代码分析(包mapreduce.lib.input)

    接下来我们按照MapReduce过程中数据流动的顺序,来分解org.apache.hadoop.mapreduce.lib.*的相关内容,并介绍对应的基类的功能.首先是input部分,它实现了MapR ...

  6. Hadoop源代码分析(四)

    为org.apache.hadoop.io.compress等的分析预留位置 转载于:https://www.cnblogs.com/94julia/archive/2013/04/01/299281 ...

  7. Hadoop源代码分析(MapReduce概论)

    大家都熟悉文件系统,在对HDFS进行分析前,我们并没有花很多的时间去介绍HDFS的背景,毕竟大家对文件系统的还是有一定的理解的,而且也有很好的文档.在分析Hadoop的MapReduce部分前,我们还 ...

  8. Hadoop源代码分析之Configuration

    最近也觉得应该仔细的看一下Hadoop的源代码了,以前只是懂得基本的架构了使用,最近在做一个系统,觉得很多东西可以借鉴MapReduce的可扩展性.但是当我们的系统的0.1版本出现的时候才发现我们的配 ...

  9. Hadoop源代码分析(IFile)

    为什么80%的码农都做不了架构师?>>>    Mapper的输出,在发送到Reducer前是存放在本地文件系统的,IFile提供了对Mapper输出的管理.我们已经知道,Mappe ...

  10. Hadoop源代码分析(二)

    下面给出了Hadoop的包的功能分析. Package Dependences tool 提供一些命令行工具,如DistCp,archive mapreduce Hadoop的Map/Reduce实现 ...

最新文章

  1. ASP.NET页生命周期概述
  2. php判断邮箱是否合法性,php验证邮箱地址合法性
  3. 【Python初级】009-错误与异常
  4. 12本接收率高的医学SCI期刊
  5. json与java反射_Java 对象的 Json 化与反 Json 化
  6. 2018-2019-2 20175223 实验三《敏捷开发与XP实践》实验报告
  7. MySQL 集群方案介绍
  8. javascript Array类型 方法大全
  9. LeetCode(268)——缺失数字(JavaScript)
  10. Clojure Web 开发 (一)
  11. centos8装mysql_CentOS8下安装mysql8
  12. wps word文档生成目录的时候显示断裂会生成大纲怎么办_橙瓜码字小说自动生成器,对话描写,景物描写,外貌描写自动生成...
  13. LabVIEW强制重新安装无法运行或损坏的NI软件
  14. sqlserver xml 操作:3、对不确定结构、属性的xml进行处理
  15. 再见,深圳!再见,腾讯!
  16. STM32F103C8T6详细引脚表
  17. 2nd homework of OS
  18. 03 数据载入、存储及文件格式
  19. 从互动直播到在线抓娃娃,实时视频超低延迟架构的思考与实践
  20. pymssql连接sql server报错Unable to connect: Adaptive Server is unavailable

热门文章

  1. php 小程序页面传参,关于微信小程序中页面之间传参的解析
  2. 自动按键 回车 变成_【按键大扫荡】驾驶员的“眼”
  3. 集群服务器分布式iis_使用nginx实现分布式限流的方法
  4. mysql 加锁 索引_把MySQL中的各种锁及其原理都画出来
  5. php 中访问常量,php 中的常量
  6. 江苏教师计算机考试报名时间2015下半年,2021年江苏教师资格证报名时间入口-报考条件-面试报名-233网校...
  7. 版mysql客户端工具_【小白福利—初级DBA入门必看】MySQL常用工具介绍(三)——客户端工具MySQL...
  8. 软件工程中需要学习和掌握的软件都有哪些_高三孩子:你想学软件工程,要先知道这些...
  9. python整型为空的情况_深度剖析凭什么python中整型不会溢出
  10. Communicator 2007的一些设置