- 浏览: 294167 次
文章分类
最新评论
-
feargod:
...
ActivityGroup的子activity响应back事件的顺序问题 -
hoarhoar:
谢谢你,终于解决了,我真是受够了,总是45秒钟,真是疯了。
youku 的广告必须要屏蔽 -
lilai:
...
youku 的广告必须要屏蔽 -
aijuans2:
...
youku 的广告必须要屏蔽 -
weiwo1978:
说的非常好,mark
SELECT语句执行的顺序
今天分析namenode里的后台任务线程LeaseManager$Monitor,租约管理器LeaseManager负责管理租约(对于租约的概念可以看我上一篇文章),需要定时查看那些过期的租约然后销毁他们,这个从Monitor的注释中也可以看的出
那么租约管理器的完整功能又是什么呢。这个还是从他的java doc入手(hadoop里的注释写的非常好,结合注释和代码看的比较快)
- /**
- * LeaseManager does the lease housekeeping for writing on files.
- * This class also provides useful static methods for lease recovery.
- *
- * Lease Recovery Algorithm
- * 1) Namenode retrieves lease information
- * 2) For each file f in the lease, consider the last block b of f
- * 2.1) Get the datanodes which contains b
- * 2.2) Assign one of the datanodes as the primary datanode p
- * 2.3) p obtains a new generation stamp form the namenode
- * 2.4) p get the block info from each datanode
- * 2.5) p computes the minimum block length
- * 2.6) p updates the datanodes, which have a valid generation stamp,
- * with the new generation stamp and the minimum block length
- * 2.7) p acknowledges the namenode the update results
- * 2.8) Namenode updates the BlockInfo
- * 2.9) Namenode removes f from the lease
- * and removes the lease once all files have been removed
- * 2.10) Namenode commit changes to edit log
- */
租约管理器提供了如下接口给外部使用
- /**
- * Adds (or re-adds) the lease for the specified file.
- */
- synchronized void addLease(String holder, String src)
- /**
- * Remove the lease for the specified holder and src
- */
- synchronized void removeLease(String holder, String src)
租约可以简单的理解,谁拥有什么的权限(只是带有时间限制而已),那么对于存储这个关联关系最好的数据结构就是map了,LeaseManager里存放租约的有如下几个数据结构
- //
- // Used for handling lock-leases
- // Mapping: leaseHolder -> Lease
- //
- private SortedMap<String, Lease> leases
- // Set of: Lease
- private SortedSet<Lease> sortedLeases
- //
- // Map path names to leases. It is protected by the sortedLeases lock.
- // The map stores pathnames in lexicographical order.
- //
- private SortedMap<String, Lease> sortedLeasesByPath
其中第一个SortedMap主要是存放who拥有which lease,例如A客户端当前A1请求拥有L这个租约,至于L这个租约的具体表现形式就要看租约lease这个类的描述了,租约类主要有以下几个字段来描述
- private final String holder; //租约的持有者
- private long lastUpdate; //上次租约签订的时间
- private final Collection<String> paths = new TreeSet<String>(); //租约所管辖的对像,这里是hdfs文件
还是继续上面的例子说,假设L这个租约当前维护的是hdfs文件test_temp1_file,那么SortedMap里存放的数据类似就是这样的结构
- { "key" : "client_A_request_A1"
- "value" : {
- "holder" : "client_A_request_A1" ,
- "lastUpdate" : "now()"
- "paths" :[ "test_temp1_file" ]
- }
- }
第二个SortedSet主要是存放每个lease对象,这个SortedSet的目的是用于在租约过期检测里能够尽量检测那些租约快到期的数据,租约对象自身实现了Comparable接口,然后利用租约的更新时间和租约的持有者来做比较,例如有2个租约,A的上次更新时间为111111 B的上次更新时间为111112,那么B的状态就比A新1个时间单位,故A相比B更接近租约到期时间,所以AB同时存放在SortedSet中时,A在B的上面(TreeSet基于红黑树的TreeMap来实现)。
第三个SortedMap主要维护一个管辖资源与租约的映射关系,例如针对test_temp1_file这个hdfs文件会存在leaseA这租约,这个主要是用于namenode查看某个数据块是否当前存在某个租约的时候使用。
对于租约的add操作什么时候会执行呢,跟踪代码可以看到是
这个等到分析datanode节点时会仔细来分析,这里暂时先知道来源。
好现在开始分析leaseManager的Monitor任务线程的功能,他主要就是检测过期的租约,然后执行一些相应的处理。
检测过期的策略是首先从SortedSet里取出最接近过期的,也就是更新时间比较早的数据,然后用这个来和一个最大租约过期时间做比较,如果认为过期了就执行以下操作:
- 1 :判断这个租约管辖的hdfs文件上是否还有其他数据块请求(例如租约期间的其他排队请求)
- 2 :如果还有针对这个文件的请求,则这个租约就续约然后执行后续的块处理
- 3 :如果没有其他请求则删除租约,关闭这个hdfs文件,同时持久化文件块映射关系
针对租约期间其他的请求如何处理将在datanode节点上分析,现在分析还不够全面。
更多信息请查看 java进阶网 http://www.javady.com
发表评论
-
hadoop FSNamesystem中的recentInvalidateSets
2012-04-20 20:28 1010今天早就回来了,然后偷懒了2个小时,现在才开始分析代码, ... -
hadoop namenode后台jetty web
2012-04-20 20:28 1685现在开始分析namenode启动时开启的第2类线程, ... -
hadoop namenode format做了什么?
2012-04-18 20:58 1146一看到format就和磁盘格式化联想到一起,然后这个fo ... -
hadoop分布式配置(服务器系统为centos5,配置时使用的用户是root)
2012-04-14 21:19 1063目前我们使 ... -
hadoop系列A:多文件输出
2012-04-14 21:18 1471package org.myorg; import ... -
Hadoop 安装问题和解决方案
2012-04-10 13:21 1256前几天在Window和Linux主机安装了Hadoop, ... -
运行Hadoop遇到的问题
2012-04-10 13:19 1609运行Hadoop遇到的问题 1, 伪分布式模式 ... -
运行Hadoop遇到的问题
2012-04-10 13:19 0运行Hadoop遇到的问题 1, 伪分布式模式 ... -
hadoop使用过程中的一些小技巧
2012-04-09 10:16 1167hadoop使用过程中的一些小技巧 ------------- ... -
运行hadoop时的一些技巧
2012-04-09 10:14 767//用来给key分区的,需要实现Partitioner接口 ... -
hive相关操作文档收集
2012-04-08 10:51 0How to load data into Hive ... -
hive sql doc
2012-04-08 10:51 0记录2个常用的hive sql语法查询地 官方 ht ... -
hive Required table missing : "`DBS`" in Catalog "" Schema "
2012-04-08 10:51 0最近需要提取一些数据,故开始使用hive,本机搭建了一个hiv ... -
HDFS数据兼容拷贝
2012-04-08 10:50 0系统中使用了hadoop 19.2 20.2 2个版本,为啥有 ... -
hdfs 简单的api 读写文件
2012-04-08 10:50 0Java代码 import ... -
hbase之htable线程安全性
2012-04-22 15:22 1186在单线程环境下使用hbase的htable是没有问题,但是突然 ... -
hbase之scan的rowkey问题
2012-04-22 15:22 1768最近使用到hbase做存储,发现使用scan的时候,返回的ro ... -
datanode启动开启了那些任务线程
2012-04-22 15:22 1086今天开始分析datanode,首先看看datanode开启了哪 ... -
namenode这个类的主要功能
2012-04-22 15:22 1507今天来总看下namenode这个类的主要功能 首先看下这个类 ... -
hadoop监控
2012-04-22 15:21 1597通过从hadoop的 hadoop-metrics文件中就可以 ...
相关推荐
NameNode是Hadoop分布式文件系统HDFS的核心组件之一,负责维护文件系统的元数据。下面是NameNode的职责和相关知识点: NameNode的职责 NameNode是HDFS的中心节点,负责维护文件系统的命名空间。它的主要职责包括:...
2. **jstack+脚本**:通过jstack工具获取NameNode进程中的线程快照,并结合脚本自动化分析这些快照,寻找可能的死锁或阻塞情况。 3. **利用x86 PMU的Profiling工具**:利用Oprofile或Intel Vtune等工具对NameNode...
Hadoop 2.0 双 Namenode 双 Datanode 部署 Hadoop 是一个开源的大数据处理框架,它提供了分布式文件系统(HDFS)和Map/Reduce 计算框架。 在这个部署中,我们将使用 Hadoop 2.0 在两个 Ubuntu 服务器上部署双 ...
文件名“都是海量惹得祸 之 大家来聊Namenode瓶颈解决方案.pptx”表明这是一个关于Namenode问题的演讲或报告,可能详细阐述了大数据量对Namenode的影响,分析了问题的根源,并提供了具体的解决方案。 在实际解决...
HDFS 中 NameNode 节点的配置、备份和恢复 HDFS(Hadoop Distributed File System)是 Hadoop 生态系统中的分布式文件系统,它提供了高效、可靠、可扩展的文件存储解决方案。 NameNode 是 HDFS 集群中的中心服务器...
在Hadoop分布式文件系统(HDFS)中,Namenode是关键组件,它负责元数据管理,包括文件系统的命名空间和文件的块映射信息。当Namenode启动失败时,通常与fsimage和edits文件有关,这些文件是Namenode存储元数据的重要...
NameNode作为Hadoop分布式文件系统(HDFS)的核心组件之一,负责管理整个文件系统的命名空间以及客户端的文件访问。为了保证元数据的安全性和持久性,NameNode在运行过程中需要将元数据保存在内存中,并同时在磁盘中...
Hadoop之NameNode Federation图文详解 Hadoop的NameNode Federation是HDFS(Hadoop Distributed File System)中的一种架构设计,旨在解决NameNode的扩展性、隔离性和性能问题。本篇文章将对NameNode Federation的...
hdfs的namenode的元数据管理机制,简要画出了元数据管理的流程分析
3. **SafeMode Monitor线程(smmthread)**:SafeModeMonitor线程执行`SafeModeMonitor`的任务,监控集群的安全模式状态。安全模式是NameNode在启动或数据恢复期间的一种特殊状态,此时不允许文件系统的修改。...
[bigdata@namenode1 scripts]$ pwd /home/bigdata/software/hadoop/share/scripts [bigdata@namenode1 scripts]$ python configuration-utils.py -c 2 -m 8 -d 30 -k True Using cores=2 memory=8GB disks=30 hbase=...
Hadoop Namenode 是 Hadoop 分布式文件系统的核心组件之一,负责管理文件系统的命名空间。然而,在生产环境中,namenode 的崩溃可能会导致整个集群的不可用。因此,namenode 的恢复是非常重要的。本文将详细介绍 ...
Hadoop 的 NameNode 是 Hadoop 分布式文件系统(HDFS)的核心组件之一,负责管理文件系统的 namespace 和数据块的存储位置。在本文中,我们将深入探讨 Hadoop NameNode 的源码,了解其启动过程、配置加载、RPC ...
在IT行业中,高可用性是关键,特别是在大数据处理领域,Hadoop作为分布式计算框架,其NameNode节点的稳定性至关重要。"hadoop namenode双机热备"是为确保Hadoop集群持续运行而采取的一种重要策略,通过双机热备可以...
在Hadoop大数据存储系统中,HDFS(Hadoop Distributed File System)是核心组件之一,用于分布式存储大量数据。NameNode是HDFS的核心节点,负责管理文件系统的元数据,包括文件和目录的命名空间以及文件的块映射信息...
在分布式文件系统Hadoop的HDFS(Hadoop Distributed File System)中,NameNode是核心组件,负责元数据的管理,包括文件系统命名空间和文件块的映射信息。当NameNode发生故障时,数据的可用性和系统的稳定性都会受到...
NameNode及SecondaryNameNode分析
《HDFS的概念——Namenode和Datanode详解》 Hadoop分布式文件系统(HDFS)是Apache Hadoop项目的核心组件,为大数据处理提供了高效、可靠的分布式存储解决方案。HDFS设计的目标是处理海量数据,其架构基于两个核心...
小文件指的是大小相对较小的文件,它们在分布式系统中可能导致大量的数据块,增加NameNode的内存负担,降低I/O效率。为了解决这个问题,我们可以采用各种合并策略,其中一种是通过多线程并行合并小文件。本项目提供...