`
zy19982004
  • 浏览: 661760 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:251943
社区版块
存档分类
最新评论

Hadoop学习二十三:Hadoop-Hdfs FSDirectory 源码

 
阅读更多

一. FSDirectory

  • 上文Hadoop学习二十二:Hadoop-Hdfs INode源码讲到INode是文件层次结构的反应。那文件层次结构由谁去维护,就是由FSDirectory维护。
  • 我把从客户端发起一个操作到最终完成这一操作所经过的类,依次划分为外层-底层。那FSNamesystem算的上底层的东西,FSDirectory就是更底层的东西。
  • 所有会导致文件层次结构变化的操作,如addFile delete rename mkdir等,最终都会调用到FSDirectory的代码。
  • FSDirectory在完成这些操作后,也会调用FSEditLog记录下这些操作日志。
  • FSDirectory依靠成员变量final INodeDirectoryWithQuota rootDir;保存着文件名到数据块的映射关系。

二. FSDirectory 成员变量

 

  final FSNamesystem namesystem;       		//FSNamesystem对象
  final INodeDirectoryWithQuota rootDir;	//文件系统的根目录
  FSImage fsImage;  						//fsimage对象
  private boolean ready = false;			//当系统成功加载FSImage以后,ready会变成true

 

三. FSDirectory 方法

  1.  void loadFSImage(Collection<File> dataDirs,Collection<File> editsDirs,StartupOption startOpt):调用FSImage的方法(下一篇文章讲)加载目录树结构,完成后将ready设置为true。
  2. 其它成对方法:可以看到,FSDirectory存在大量的对方法method()和unprotectedMethod()。method()会检查ready的状态,会把这一操作记录到editlog中;unprotectedMethod()不检查ready的状态,不记录日志。unprotectedMethod()会被FSEditlog的loadFSEdits()方法调用,loadFSEdits()作用就是将硬盘上的editlog应用到内存中,所以不需要判断ready状态,也不需要再次写日志。

四. FSDirectory 对方法举例

  1.  INodeFileUnderConstruction addFile(String path...):Add the given filename to the fs.首先会试图在系统中创建到文件的路径,如果文件为/home/hadoop/Hadoop.tar,addFile会调用mkdirs(创建路径为/home/hadoop,这也会涉及到一系列方法),保证文件路径存在,然后创建INodeFileUnderConstruction节点,并把该节点加到目录树中(通过addNode,也是需要调用一系列方法),如果成功,就写操作日志(logOpenFile)。
  2. INode unprotectedAddFile( String path...):在系统中创建一个目录或文件(非UnderConstruction),如果是文件,还会建立对应的block。

五. FSDirectory 所有方法

 

 

 

 

 

分享到:
评论
1 楼 leibnitz 2017-09-28  
请问,你知道在FSEdigLog#loadFSEdits()时为什么先unprotectedDelete() then unprotectedAddFile()吗?

相关推荐

    Hadoop学习总结之二:HDFS读写过程解析

    ### Hadoop学习总结之二:深入理解HDFS读写过程 #### 一、HDFS文件读取流程详解 Hadoop的分布式文件系统(HDFS)是大数据存储与处理的重要基石,其读写机制的设计旨在优化大规模数据集的访问效率与容错性。本文将...

    Hadoop学习总结之二:HDFS读写过程解析.doc

    本文将详细解析HDFS的读取和写入过程,基于标题"《Hadoop学习总结之二:HDFS读写过程解析》"和描述中提到的代码分析。 1. **文件的打开** 当客户端想要打开一个HDFS文件时,它会调用`DistributedFileSystem.open`...

    hadoop源码.zip

    总结,Hadoop HDFS源码的学习是一项深入理解大数据存储技术的重要任务。通过源码,我们可以更清晰地看到HDFS是如何在分布式环境下实现高可用性和容错性的,这对于提升开发和运维技能,以及解决实际问题具有重大意义...

    hadoop-2.6.5-src

    在源码中,主要关注`org.apache.hadoop.hdfs.server.namenode`包下的类,如`FSDirectory`和`NameNode`。 - **DataNode**: 存储数据的实际节点,负责数据块的存储和读取。相关源码在`org.apache.hadoop.hdfs.server....

    hdfs源码.zip

    第1章 HDFS 1 1.1 HDFS概述 1 1.1.1 HDFS体系结构 1 1.1.2 HDFS基本概念 2 1.2 HDFS通信协议 4 1.2.1 Hadoop RPC接口 4 1.2.2 流式接口 20 1.3 HDFS主要流程 22 1.3.1 HDFS客户端读流程 22 1.3.2 ...

    高可用性的HDFS:Hadoop分布式文件系统深度实践

    第1章 HDFS HA及解决方案 1.1 HDFS系统架构 1.2 HA定义 1.3 HDFS HA原因分析及应对措施 1.3.1 可靠性 1.3.2 可维护性 1.4 现有HDFS HA解决方案 1.4.1 Hadoop的元数据备份方案 1.4.2 Hadoop的SecondaryNameNode方案 ...

    Hadoop源代码分析(二三)

    本文将聚焦于Hadoop中的`FSDirectory`类,它是HDFS(Hadoop分布式文件系统)核心组件之一,负责维护文件系统目录树的状态。通过分析其成员变量与方法,我们可以更好地理解HDFS是如何管理文件目录状态、数据块以及...

    Hadoop编程思想

    Hadoop的核心组件包括**Hadoop Distributed File System (HDFS)** 和 **MapReduce**。Hadoop架构主要由以下几个关键部分组成: - **NameNode**: 存储元数据(metadata),如文件系统命名空间(文件名、目录名等)和...

    Hadoop源代码分析(三一)

    在深入探讨Hadoop源代码分析之前,我们先理解Hadoop的核心组件:HDFS(Hadoop Distributed File System),它是一个分布式文件系统,旨在处理和存储大量数据。本篇分析主要涉及HDFS的操作,如文件重命名、删除、创建...

Global site tag (gtag.js) - Google Analytics