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

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

    ### HDFS(分布式文件系统) #### HDFS写入剖析: 1. **发请求**:客户端首先向NameNode发起写文件的请求。 2. **检查**:NameNode对客户端的请求进行合法性验证,包括检查文件是否已经存在以及客户端是否有相应的...

    Hadoop技术-HDFS元数据.pptx

    Hadoop技术-HDFS元数据是Hadoop技术中非常重要的一部分,HDFS(Hadoop Distributed File System)是Hadoop技术的核心组件之一,负责存储和管理大规模数据。HDFS元数据是Hadoop技术中用于维护整个文件系统的数据,...

    hadoop hdfs配置

    ### Hadoop HDFS配置详解 #### 一、概述 在大数据处理领域,Hadoop作为一款开源软件框架,被广泛应用于分布式存储与计算。Hadoop Distributed File System (HDFS)是Hadoop的核心组件之一,用于存储大规模数据集。...

    02-Hadoop-HDFS.docx

    ### Hadoop-HDFS知识点解析 #### 一、HDFS概述 **1.1 HDFS产出背景及定义** HDFS(Hadoop Distributed File System)是一种分布式文件系统,它为Hadoop的大数据处理提供了高效的存储能力。随着互联网的发展,数据...

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

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

    Hadoop-HDFS.docx

    【Hadoop-HDFS概述】 Hadoop-HDFS,全称为Hadoop Distributed File System,是一种分布式文件系统,旨在解决大规模数据存储和处理的问题。随着大数据时代的到来,单个操作系统无法有效地管理和维护海量数据,因此,...

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

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

    Hadoop学习总结之一:HDFS简介

    HDFS(Hadoop Distributed File System)是 Hadoop 生态系统中的一个核心组件,负责存储和管理大规模数据。下面是 HDFS 的基本概念和架构: 数据块(Block) HDFS 中的基本存储单位是 64M 的数据块。与普通文件系统...

    Hadoop学习总结之一:HDFS简介.doc

    总结来说,HDFS是Hadoop分布式计算框架的核心组件,提供高容错、高吞吐量的数据存储服务。通过数据块、NameNode、DataNode以及Secondary NameNode等机制,实现了文件的分布式存储和高效访问。数据流的过程涉及读文件...

    大数据平台-HDFS培训.pdf

    Hadoop Distributed File System (HDFS) 是Apache Hadoop项目的核心组件之一,是一个分布式文件系统,专为处理大规模数据而设计。HDFS被广泛应用于存储和处理超大文件,如几百MB、GB乃至TB、PB级别的数据,支持流式...

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

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

    个人笔记_hadoop-hdfs架构详解.docx

    理解HDFS的架构和工作原理对于深入学习Hadoop和大数据处理至关重要,它是构建大数据解决方案的基石。在实践中,根据具体场景调整HDFS的配置参数,如数据块大小、副本数量、磁盘目录策略等,能够进一步优化性能和可靠...

    hadoop-common-2.2.0-bin-master

    描述中提到,Hadoop是由Apache基金会开发的,这表明它是开放源码的,允许全球的开发者参与其发展并根据自己的需求进行定制。Apache Hadoop的创建是为了应对大规模数据处理的挑战,它借鉴了Google的GFS(Google File ...

    hadoop命令指南

    ### Hadoop命令指南详解 #### 一、概述 在深入探讨Hadoop命令的具体用法之前,我们先来了解一下Hadoop的基本概念以及如何调用这些命令。 **1.1 泛用选项** Hadoop提供了一套泛用选项,这些选项被多个命令支持。...

    hdfs-command-line_Transcript.pdf

    #### 二、HDFS命令行接口的基本结构 所有用于操作HDFS的命令都遵循一个基本的结构:`hadoop fs`后面跟上具体的命令。例如,`hadoop fs -ls`用于列出HDFS中的文件和目录。这种结构类似于Unix/Linux系统中的命令格式...

    2大数据技术之Hadoop(HDFS文件系统).doc

    Hadoop HDFS(Hadoop Distributed File System)是Apache Hadoop项目的核心组件之一,是一个分布式文件系统,专门设计用于处理和存储海量数据。HDFS具有高容错性和高可扩展性,能够在一个硬件集群上无缝地运行。 ##...

Global site tag (gtag.js) - Google Analytics