一. Lease
- 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. - 翻译如下:Lease管理着一个client占用的所有锁。一个client对应着一个Lease,在client发送请求时,对应Lease的timestamp调整到最新时间。如果client死亡,让对应Lease过期,释放Lease管理的所有锁。
- 个人理解:Lease是一个文件写锁,当client需要写文件时,需要申请一个Lease。NameNode负责记录哪个文件上有Lease,Lease的客户是谁,超时时间。
- 成员变量
private final String holder; //客户端名 private long lastUpdate; //最近更新时间 private final Collection<String> paths = new TreeSet<String>(); //该客户端操作的文件集合
- 方法,其方法都很简单,随便举两个例子
/** 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
- Monitor checks for leases that have expired, and disposes of them.
- 每两秒调用checkLeases()。checkLeases()检查每个Lease是否过期,如果过期,调用fsnamesystem.internalReleaseLeaseOne(oldest, path);
三. LeaseManager
- LeaseManager管理着所有的Lease。
- Lease和Monitor都是LeaseManager内部类。Lease的private构造函数保证额只有LeaseManager才能创建一个Lease。
- 成员变量
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>();
- 方法,无非就是对几个集合的增删改查操作,毫无难度。需要注意的是,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 Distributed File System)源码的专业书籍。这本书旨在帮助读者理解HDFS的核心机制,提升在分布式存储系统方面的专业技能。 ...
源码中可以深入了解HDFS的Block、 Lease、Heartbeat机制。 2. `DFSClient`:客户端类,用于与HDFS交互,包括文件读写操作。源码中包含了文件打开、创建、追加、读取、删除等核心方法。 3. `FSNamesystem`:HDFS的...
《HDFS源码解析——揭示分布式文件系统的内在...总之,HDFS源码解析是一次探索分布式存储奥秘的旅程,通过对源码的深入学习,我们可以了解到如何构建一个健壮、高效的分布式文件系统,从而更好地适应大数据时代的需求。
第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在大数据处理中的核心组件——HDFS(Hadoop Distributed File System)和MapReduce。 1. Hadoop分布式文件系统(HDFS):HDFS是Hadoop的基础,是一个高度容错性的系统,...
由鲍亮教授提供的西电版Hadoop文件系统源代码,为学习和理解HDFS的工作原理提供了宝贵的资源。以下是对HDFS源代码中的关键概念、设计原则和实现细节的详细解析。 1. **HDFS架构** - **主从结构**:HDFS采用主从...
分布式文件系统HDFS(Hadoop Distributed File System)是Apache Hadoop项目的核心组件之一,它为大规模数据处理提供了可扩展的、高吞吐量的数据存储方案。本课件集合旨在全面介绍HDFS的基本概念、架构原理以及实际...
4. **Client失效**:客户端崩溃可能导致未完成的写操作,HDFS有一套租约机制来处理客户端崩溃后的数据一致性问题,如 Lease Recovery 和 Checkpoint Node。 **系统升级回滚** HDFS支持集群的回滚功能,允许在遇到...
在Java编程环境中,Hadoop分布式文件系统(HDFS)是一个关键的组件,它为大数据处理提供了高容错、可扩展的存储解决方案。本教程将详细阐述如何使用Java API来操作HDFS,包括文件的增加、删除、修改和读取等基本操作...
Hadoop分布式文件系统(HDFS)作为大数据处理领域的重要组成部分,在面对大规模数据集时展现出了强大的可靠性和高效性。然而,在实际应用过程中,难免会遇到各种异常情况,如硬件故障、网络问题等。这些异常不仅会...
在深入分析Hadoop源代码的过程中,我们聚焦于`INode*`类,这些类构成了Hadoop分布式文件系统(HDFS)文件层次结构的基础。`INode`作为一个抽象类,是目录(`INodeDirectory`)和文件(`INodeFile`)的父类。`...
HDFS(Hadoop Distributed File System)和KFS(Kosmos File System)都是GFS(Google File System)的开源实现,它们被设计用来处理大规模分布式存储。HDFS是Hadoop生态系统的一部分,使用Java语言开发,擅长处理高...
《Hadoop分布式文件系统:架构和设计》是深入理解HDFS(Hadoop Distributed File System...通过深入学习《Hadoop分布式文件系统:架构和设计》,开发者可以更好地利用HDFS解决实际的云环境问题,提升系统性能和可靠性。
1. **INode类**:`INode`是Hadoop HDFS(Hadoop Distributed File System)中的基本抽象,代表文件系统树中的一个节点,可以是目录或文件。`INode`包含文件名、修改时间和访问时间、父目录引用以及权限信息。权限...
- **分布式文件系统**:为大规模数据存储提供支持,如Hadoop HDFS。 - **键值存储**:提供高性能的读写操作,适用于需要快速访问的场景。 **1.1.4 异常** 在分布式环境中,异常情况不可避免,包括但不限于网络故障...