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

Hadoop学习二十五:Hadoop-Hdfs FSImage源码

 
阅读更多

一. FSImage作用

  1. 加载硬盘镜像文件fsimage到内存。
  2. 加载硬盘日志文件edits到内存。这个本来是类FSEditlog的事情,但是是由FSImage负责调用。
  3. 保存内存中文件层次结构到硬盘文件fsimage中。
  4. 保存内存中操作日志到硬盘文件edits上。按照对应关系,觉得是应该有这么一步吧。但遗憾的告诉你,这一步在整个文件系统中不存在。也就是FSImage可以分为内存和硬盘的,而edits只存在硬盘上,每次操作直接写入edits文件中。
  5. 因为FSImage继承Storage,所以FSImage和DataStorage(http://zy19982004.iteye.com/blog/1878758)一样,会做状态分析-----恢复操作-----状态转换操作。不同的是FSImage的状态转换支持IMPORT启动,对应着doImportCheckpoint()方法。
  6. 其它作用。

二. FSImage成员变量

  1.  FSEditLog editLog
  2. Collection<File> checkpointDirs:FSDirectory初始化时会从配置文件里读取"fs.checkpoint.dir",给其赋值。
  3. Collection<File> checkpointEditsDirs:FSDirectory初始化时会从配置文件里读取"fs.checkpoint.edits.dir",给其赋值。

三. FSImage方法

  1. boolean recoverTransitionRead(Collection<File> dataDirs,Collection<File> editsDirs,StartupOption startOpt) :完成状态分析-----恢复操作-----状态转换操作后调用boolean loadFSImage(MetaRecoveryContext recovery)。
  2. doImportCheckpoint():Load image from a checkpoint directory and save it into the current one.FSImage需要支持参数-importCheckpoint,该参数用于在某一个checkpoint目录里加载HDFS的目录信息,并更新到当前系统。
  3. boolean loadFSImage(MetaRecoveryContext recovery):在所有的Storage中,读取最新的NameNode持久化信息,并应用相应的日志,当loadFSImage()调用返回以后,内存中的目录树就是最新的。loadFSImage()会返回一个标记,如果Storage中有任何和内存中最终目录树中不一致的Image(最常见的情况是日志文件不为空,那么,内存中的fsimage应该是Storage的fsimage加上日志,当然还有其它情况),那么,该标记为true。
    //dirIterator find 最新的NameNode持久化信息StorageDirectory latestNameSD and latestEditsSD
    needToSave |= loadFSImage(getImageFile(latestNameSD, NameNodeFile.IMAGE));
    needToSave |= (loadFSEdits(latestEditsSD, recovery) > 0);
    
     
  4.   boolean loadFSImage(File curFile):从硬盘上加载fsimage文件,应用到内存中。
    //1.循环从FSImage文件输入流in中读取如下基本信息,构建成一个INodeDirectory(INodeDirectory包含INodeFile,INodeFile包含哪些Block等);然后把此INodeDirectory加入FSDirectory中
    for-each{parentINode = fsDir.addToParent(path, parentINode, permissions,
                                            blocks, replication, modificationTime, 
                                            atime, nsQuota, dsQuota, blockSize);
          }
          
          //2.加载Datanode信息
          this.loadDatanodes(imgVersion, in);
    
          //3.load Files Under Construction
          this.loadFilesUnderConstruction(imgVersion, in, fsNamesys);
          //4
          this.loadSecretManagerState(imgVersion, in, fsNamesys);
    
     
  5.  int loadFSEdits(StorageDirectory sd, MetaRecoveryContext recovery):加载edits文件到内存中;如果存在edit.new文件,加载此文件到内存。返回一个load了多少个edits文件。
      int loadFSEdits(StorageDirectory sd, MetaRecoveryContext recovery)
          throws IOException {
        numEdits = FSEditLog.loadFSEdits(edits, recovery);
        if (editsNew.exists() && editsNew.length() > 0) {
          numEdits += FSEditLog.loadFSEdits(edits, recovery);
        }
    
        return numEdits;
      }
     
  6. void saveFSImage(File newFile):保存内存中的文件层次结构到fsimage文件中。和4过程相反。
    // save the root
          saveINode2Image(strbuf, fsDir.rootDir, out);
          // save the rest of the nodes
          saveImage(strbuf, 0, fsDir.rootDir, out);
          fsNamesys.saveFilesUnderConstruction(out);
          fsNamesys.saveSecretManagerState(out);
     
  7. void rollFSImage():把所有的edits.new都改为edits(调用editLog.purgeEditLog()),然后再把fsimage.ckpt改为fsimage。对应着http://zy19982004.iteye.com/admin/blogs/1870624三.6

 

 

四. FSImage类图

 

 

 

五. FSImage其它知识点

      参考http://caibinbupt.iteye.com/blog/289759

 

 

 

分享到:
评论

相关推荐

    hadoop-hdfs-fsimage-exporter:将Hadoop HDFS内容统计信息导出到Prometheus

    Prometheus Hadoop HDFS FSImage导出器 | 将Hadoop HDFS统计信息导出到包括 总数/每个用户/每个组/每个配置的目录路径/每个路径集 目录数 文件数 文件大小和大小分布(可选) 块数 文件复制(总体/每个用户摘要)...

    hadoop hdfs配置

    大数据,hadoop,hdfs配置,java开发

    hadoop-hdfs:Hadoop分布式文件系统hdfs代码分析

    hadoop-hdfs Hadoop分布式文件系统hdfs代码分析目录介绍Datanode-数据块基本结构主要介绍了HDFS中第二关系块结构,数据块到数据中断的映射关系。退役-中断退款主要介绍了数据异步下线取消机制。INode-文件目录结构...

    Hadoop学习笔记(二)Hadoop 分布式文件系统 HDFS:1.HDFS基础

    HDFS客户端操作(开发重点) 1. HDFS客户端环境准备 1.1、请参考文章: Windows10下搭建eclipse开发hadoop的开发环境 其中的第一至四步骤。 1.2、请参考文章: maven的安装、路径配置、修改库文件路径和eclipse中的...

    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 ...

    hadoop-health-check:在docker上运行的基于ELK的仪表板可提供使用状​​况检查的见解

    HDFS:对整个FSImage进行了索引,您可以在基于目录的级别上进行汇总,并搜索包括元数据和访问时间在内的特定文件 纱:在实时仪表板中以分钟为单位对历史数据建立索引并进行实时汇总 Ambari:索引并搜索Ambari警报以...

    hfsa:Hadoop FSImage分析器(HFSA)

    Hadoop FSImage分析器(HFSA) 介绍 Hadoop FSImage分析器(HFSA)通过提供补充 支持对HDFS数据文件以及用户和组目录的概述进行概述(回答“谁拥有多少个/大/小文件...”) 一个用于从派生的用于快速和部分多线程的...

    大数据安全hadoop所用ppt

    hadoop集群配置 大数据安全---大数据概述 fsimage和editlog读取方法 大数据处理架构hadoop linux基础命令操作方法 hdfs读取文件

    hadoop2.7安装演示

    Using the OfflineImageViewer, clients can now browse an fsimage via the WebHDFS API. The NFS gateway received a number of supportability improvements and bug fixes. The Hadoop portmapper is no longer ...

    Apache Hadoop 2.7.2

    Using the OfflineImageViewer, clients can now browse an fsimage via the WebHDFS API. The NFS gateway received a number of supportability improvements and bug fixes. The Hadoop portmapper is no longer...

    大数据工作面试练习题 BAT大数据面试题 Hadoop、kafka、HDFS、Spark、MapReduce 共19页.pdf

    大数据工作面试练习题 2018最新BAT大数据面试题 Hadoop、kafka、HDFS、Spark、MapReduce 【内容大纲-共25道题目】 1、kafka的message包括哪些信息? 3 2、怎么查看kafka的offset? 3 3、hadoop的shuffle过程是? 3 ...

    Java版水果管理系统源码-big-data-knowledge::open_book:大数据相关知识集锦

    Java版水果管理系统源码 big-data-knowledge :open_book:大数据相关知识集锦 hdfs HDFS简介 HDFS是Hadoop Distributed File System的简写 HDFS具有高容错性和高吞吐性的特点 HDFS目前是 append only,暂时不支持随机...

    hadoop分析

    HDFS实现时,没有采用定期导出元数据的方法,而是采用元数据镜像文件(FSImage)+日子文件(edits)的备份机制。寻路径流程:路径信息bocks[]triplets[]Client------------》INode---------------------》BlockInfo ...

    HDFS详解②

    HDFS 文章目录HDFS4 HDFS的数据流4.1 HDFS... 第二阶段:Secondary NameNode工作5.2 Fsimage和Edits解析5.2.1. 概念5.2.2 oiv查看Fsimage文件5.2.3 oev查看Edits文件5.3 CheckPoint时间设置5.4 NameNode故障处理 4 HDF

    git-test:git测试

    hadoop-hdfs Hadoop分布式文件系统hdfs代码分析目录介绍 Datanode-数据块基本结构主要介绍了HDFS中第二关系块结构,数据块到数据中断的映射关系。退役-中断退款主要介绍了数据异步下线取消机制。 INode-文件目录结构...

    大数据开发笔试.docx

    答:Hadoop2相比较于Hadoop1.x来说,HDFS的架构与MapReduce的都有较大的变化,且速度上和可用性上都有了很大的提高,Hadoop2中有两个重要的变更:首先HDFS的NameNodes可以以集群的方式布署,增强了NameNodes的水平...

    monkeysayhi#HexoBlogOnGithub#HDFS-1.x、2.x的RPC接口1

    开启HA后的检查点工作原理在1.x中已经介绍了未开启HA时的检查点工作原理:fsimage与editlog仅保存在唯一的名字节点上,第二名字节点定期合并得到新的

    NNAnalytics:NameNodeAnalytics 是一个自助实用程序,用于侦察和维护 HDFS 实例的命名空间

    “备用只读 HDFS NameNode,没有 RPC 服务器,通过 REST API 为客户端提供服务,利用 Java 8 Stream API,所有这些都是为了为最终用户对整个文件系统元数据执行大型复杂的扫描。” 立即在本地运行演示! 只需在工作...

Global site tag (gtag.js) - Google Analytics