zoukankan      html  css  js  c++  java
  • Hadoop分布式文件系统--HDFS结构分析

    前言

    在Hadoop内部,详细实现了很多类的文件系统,当然最最被我们用到的就是他的分布式文件系统HDFS了。

    可是本篇文章不会讲HDFS的主从架构等东西,由于这些东西网上和资料书中都讲得非常多了。

    所以,我决定以我个人的学习所得。来讲讲HDFS内部的一些有意思的东西,也作为一个起始点。为兴许继续深入当中模块的学习做基础。

    HDFS两大主流关系模块

    • 与NameNode相关,文件系统元数据操作相关。包含文件文件夹树,每一个文件对于数据块列表,fsImgae镜像文件和editlog编辑日志在维护整个集群元数据的时候的各种操作。

    • 与DataNode相关。指的就是数据块与数据节点的相应关系,通俗的理解就是某个数据块保存在哪些数据节点上。里面事实上会涉及到非常多操作,包含block副本复制,损坏块删除。租约机制等等。

    第一关系模块(NameNode相关)

    涉及的类

    INode

    Hadoop也相同用了相似linux文件系统中的i-node的概念,即索引节点。

    INode是一个抽象类。后面的INodeDirectory以及INodeFile都是他的子类。这样就能够做到保持一些共同拥有的属性。

    INodeDirectory,INodeFile

    • 经常用法:
      • INodeDirectory.removeChild()

    FSImage

    • 命名空间镜像类,以下是经常使用的方法
      • FSImage.saveFSImage()–讲当前时刻的命名空间镜像,保存文件里
      • FSImage.loadFSImage()–读取镜像文件里的数据。恢复元数据

    FSEditLog

    • 编辑日志类。以下是经常用法
      • FSEditLog.logEdit()–写入日志记录操作。
      • FSEditLog.logSync()–同步日志记录操作。
      • FSEditLog.rollEditLog()–用于第二名字节点上载新命名空间镜像。

    FSDirectory

    • HDFS引入FSDirectory作为门面,处理各种操作,然后分派到子系统中的各个对象中。经常用法
      • getFileInfo()–获取文件状态信息
      • setOwner()–改动文件主标识符和用户组标识符

    第二关系模块(DataNode相关)

    Block数据块相关类

    • BlocksMap–数据块映射,名字节点上数据块的元数据
    • DatanodeDescriptor–数据节点描写叙述符,名字节点对数据节点的抽象
    • BlockInfo-BlocksMap,保存数据节点的信息

    数据节点管理

    • refreshNodes()–会读取dfs.hosts.exclude,include配置的信息。

    • registerDatanode–数据节点注冊
    • DataNode.offerService()–数据节点利用循环向名字节点发送信息。

    网络结构

    • 相关类NetworkTopology,经常用法:

      • getDistance()–计算网络距离
      • isOnSameRack()–推断节点是否属于同一机架上
    • DNSToSwitchMapping–此接口用于主机到网络位置的转换

    数据块管理

    • 相关类主要为FSNameSystem,经常用法:
      • FSNameSystem.addStoreBlock()–加入数据块副本
      • blockReceived()–数据块提交方法,数据节点成功接收到一个数据块后,必须使用此方法向名字节点提交数据块信息。

    读取数据方法

    • getBlockLocations()–读取数据前须要定位数据的位置,返回LocatedBlock对象实例
    • reportBadBlocks()

    租约

    • 简单的说,租约是名字节点给予租约持有者在规定时间内对文件的使用权限。
      • LeaseManager.Lease 租约持有者的信息,就是client。
      • LeaseManager.add()–在租约管理器中加入打开文件的信息。
      • FSNamesystem.checkLease()–租约检查操作。为追加数据打开文件。加入。放弃数据块或关闭文件的时候,都须要对被操作的文件进行租约检查。

      • LeaseManager.renewLease()–通过更新Lease.lastUpdate的值来维护租约。
      • LeaseManager.Monitor–这是一个内部类。Monitor类实现了runnable接口,定期进行租约检查。

    安全模式

    • SafeMode安全模式是HDFS的一个仅仅读的视图模式,全部的更新操作都会检验一次是否处于安全模式,相关类以及方法
      • SafeModeMonitor–安全模式的检查线程实现类。
      • canLeave()–推断内部的reached变量的值
      • setSafeMode()

    參考文献

    《Hadoop技术内部–HDFS结构设计与实现原理》.蔡斌等

  • 相关阅读:
    利用JSGrid创建甘特图
    Using the SharePoint 2010 Client Object Model_part_2
    Using the SharePoint 2010 Client Object Model_part_1
    如何利用Featue对特定的文档库或列表添加listviewtoolbar上的button
    SharePoint 2010 工作流解决方案:创建带有关联窗体和启动窗体的工作流
    Wireshark过滤器
    first blog
    DataAdapter.update如果处理自动增长列的数据
    ms sql 中关于spid=2的问题
    利用ADO.NET RowUpdating更新DataRow信息
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7019412.html
Copyright © 2011-2022 走看看