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

Hadoop学习二十六:Hadoop-Hdfs Lease源码

 
阅读更多

一. Lease

  1.  A Lease governs all the locks held by a single client.
       * For each client there's a corresponding lease, whose
       * timestamp is updated when the client periodically
       * checks in.  If the client dies and allows its lease to
       * expire, all the corresponding locks can be released.
  2. 翻译如下:Lease管理着一个client占用的所有锁。一个client对应着一个Lease,在client发送请求时,对应Lease的timestamp调整到最新时间。如果client死亡,让对应Lease过期,释放Lease管理的所有锁。
  3. 个人理解:Lease是一个文件写锁,当client需要写文件时,需要申请一个Lease。NameNode负责记录哪个文件上有Lease,Lease的客户是谁,超时时间。
  4. 成员变量
    private final String holder;	//客户端名
        private long lastUpdate;		//最近更新时间
        private final Collection<String> paths = new TreeSet<String>();	//该客户端操作的文件集合
  5. 方法,其方法都很简单,随便举两个例子
     /** Only LeaseManager object can create a lease */
        private Lease(String holder) {
          this.holder = holder;
          renew();
        }
    /** Only LeaseManager object can renew a lease */
      private void renew() {
        this.lastUpdate = FSNamesystem.now();
      }
    
    //replacing oldpath with  newpath
      synchronized void changeLease(String src, String dst,
          String overwrite, String replaceBy) {
          }
    
      synchronized void removeLeaseWithPrefixPath(String prefix) {
          }
     
     

二. Monitor

  1.  Monitor checks for leases that have expired, and disposes of them.
  2. 每两秒调用checkLeases()。checkLeases()检查每个Lease是否过期,如果过期,调用fsnamesystem.internalReleaseLeaseOne(oldest, path);

 

三. LeaseManager

  1.  LeaseManager管理着所有的Lease。
  2. Lease和Monitor都是LeaseManager内部类。Lease的private构造函数保证额只有LeaseManager才能创建一个Lease。
  3. 成员变量
      private final FSNamesystem fsnamesystem;
      //Lease.holder -> Lease
      private SortedMap<String, Lease> leases = new TreeMap<String, Lease>();
      // Set of: Lease
      private SortedSet<Lease> sortedLeases = new TreeSet<Lease>();
    
       //pathnames -> Lease
      private SortedMap<String, Lease> sortedLeasesByPath = new TreeMap<String, Lease>();
  4. 方法,无非就是对几个集合的增删改查操作,毫无难度。需要注意的是,addLease()并没有检查文件(src)上是否已经有Lease,这个需要由LeaseManager调用者保证。
    synchronized Lease addLease(String holder, String src) {
        Lease lease = getLease(holder);
        if (lease == null) {
          lease = new Lease(holder);
          leases.put(holder, lease);
          sortedLeases.add(lease);
        } else {
          renewLease(lease);
        }
        sortedLeasesByPath.put(src, lease);
        lease.paths.add(src);
        return lease;
      }
    
      /**
       * Remove the specified lease and src.
       */
      synchronized void removeLease(Lease lease, String src) {
        sortedLeasesByPath.remove(src);
    
      }
    
      /**
       * Reassign lease for file src to the new holder.
       */
      synchronized Lease reassignLease(Lease lease, String src, String newHolder) {
    
        return addLease(newHolder, src);
      }
    
      /**
       * Remove the lease for the specified holder and src
       */
      synchronized void removeLease(String holder, String src) {
    
      }
    
      /**
       * Finds the pathname for the specified pendingFile
       */
      synchronized String findPath(INodeFileUnderConstruction pendingFile
          ) throws IOException {
      }
    
      /**
       * Renew the lease(s) held by the given client
       */
      synchronized void renewLease(String holder) {
    
      }

 

四. LeaseManager类图

 

 

分享到:
评论

相关推荐

    Hadoop_2.X_HDFS源码剖析_带索引书签目录_徐鹏

    《Hadoop_2.X_HDFS源码剖析》是由徐鹏编著的一本深入解析Hadoop 2.x版本中HDFS(Hadoop Distributed File System)源码的专业书籍。这本书旨在帮助读者理解HDFS的核心机制,提升在分布式存储系统方面的专业技能。 ...

    hadoop-src源代码

    源码中可以深入了解HDFS的Block、 Lease、Heartbeat机制。 2. `DFSClient`:客户端类,用于与HDFS交互,包括文件读写操作。源码中包含了文件打开、创建、追加、读取、删除等核心方法。 3. `FSNamesystem`:HDFS的...

    HDFS源码解析

    《HDFS源码解析——揭示分布式文件系统的内在...总之,HDFS源码解析是一次探索分布式存储奥秘的旅程,通过对源码的深入学习,我们可以了解到如何构建一个健壮、高效的分布式文件系统,从而更好地适应大数据时代的需求。

    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权威指南(源代码)

    通过研究这些源码,我们可以深入了解Hadoop在大数据处理中的核心组件——HDFS(Hadoop Distributed File System)和MapReduce。 1. Hadoop分布式文件系统(HDFS):HDFS是Hadoop的基础,是一个高度容错性的系统,...

    Hadoop文件系统源代码.rar

    由鲍亮教授提供的西电版Hadoop文件系统源代码,为学习和理解HDFS的工作原理提供了宝贵的资源。以下是对HDFS源代码中的关键概念、设计原则和实现细节的详细解析。 1. **HDFS架构** - **主从结构**:HDFS采用主从...

    完整版大数据课件集合3-大数据导论-第三章-分布式文件系统HDFS(共54页).rar

    分布式文件系统HDFS(Hadoop Distributed File System)是Apache Hadoop项目的核心组件之一,它为大规模数据处理提供了可扩展的、高吞吐量的数据存储方案。本课件集合旨在全面介绍HDFS的基本概念、架构原理以及实际...

    Hadoop可靠性报告-百度分享

    4. **Client失效**:客户端崩溃可能导致未完成的写操作,HDFS有一套租约机制来处理客户端崩溃后的数据一致性问题,如 Lease Recovery 和 Checkpoint Node。 **系统升级回滚** HDFS支持集群的回滚功能,允许在遇到...

    java操纵hdfs

    在Java编程环境中,Hadoop分布式文件系统(HDFS)是一个关键的组件,它为大数据处理提供了高容错、可扩展的存储解决方案。本教程将详细阐述如何使用Java API来操作HDFS,包括文件的增加、删除、修改和读取等基本操作...

    HDFS Exception

    Hadoop分布式文件系统(HDFS)作为大数据处理领域的重要组成部分,在面对大规模数据集时展现出了强大的可靠性和高效性。然而,在实际应用过程中,难免会遇到各种异常情况,如硬件故障、网络问题等。这些异常不仅会...

    Hadoop源代码分析(一九)

    在深入分析Hadoop源代码的过程中,我们聚焦于`INode*`类,这些类构成了Hadoop分布式文件系统(HDFS)文件层次结构的基础。`INode`作为一个抽象类,是目录(`INodeDirectory`)和文件(`INodeFile`)的父类。`...

    HDFS和KFS的比较.pdf

    HDFS(Hadoop Distributed File System)和KFS(Kosmos File System)都是GFS(Google File System)的开源实现,它们被设计用来处理大规模分布式存储。HDFS是Hadoop生态系统的一部分,使用Java语言开发,擅长处理高...

    hdfs_design.zip_系统设计方案_C/C++_

    《Hadoop分布式文件系统:架构和设计》是深入理解HDFS(Hadoop Distributed File System...通过深入学习《Hadoop分布式文件系统:架构和设计》,开发者可以更好地利用HDFS解决实际的云环境问题,提升系统性能和可靠性。

    源代码分析(一九).docx

    1. **INode类**:`INode`是Hadoop HDFS(Hadoop Distributed File System)中的基本抽象,代表文件系统树中的一个节点,可以是目录或文件。`INode`包含文件名、修改时间和访问时间、父目录引用以及权限信息。权限...

    分布式系统原理介绍

    - **分布式文件系统**:为大规模数据存储提供支持,如Hadoop HDFS。 - **键值存储**:提供高性能的读写操作,适用于需要快速访问的场景。 **1.1.4 异常** 在分布式环境中,异常情况不可避免,包括但不限于网络故障...

Global site tag (gtag.js) - Google Analytics