Hadoop_NameNode_代码分析_目录树(2)

(1)NameNode的内存中保存了庞大的目录树结构,这个结构用来保存文件目录结构和文件Block之间的映射,这种结构关系会固化在磁盘上,但是对树的改动频繁发生,什么时候将树写入磁盘呢?把每次操作应用到内存中的树上,并把操作记录成日志文件,每次操作不会改变固化在磁盘上的改动发生之前的目录树,适当的时候做一次固化操作并记录时间。

(2)NameNode上面的磁盘目录结构:

[hadoop@localhost dfs]$ ls -R name

name:
current  image  in_use.lock

name/current:
edits  fsimage  fstime  VERSION

name/image:
fsimage

in_use.lock的功能和DataNode的一致。fsimage保存的是文件系统的目录树,edits则是文件树上的操作日志,fstime是上一次新打开一个操作日志的时间(long型)。NameNode成功载入一次fsimage就要把这个时刻记录在fstime中,fstime表示edits第一条记录开始记录的时刻。saveImage的时候需要先写入中间文件,防止中途断电。

image/fsimage是一个保护文件,防止0.13以前的版本启动(0.13以前版本将fsimage存放在name/image目录下,如果用0.13版本启动,显然在读fsimage会出错J)。也就是说写入fsimage要有两份。

(3)管理NameNode磁盘目录的是FSImage,也是继承Storage类的,和DataStorage类似,有升级回退机制,暂时不考虑。

(4)FSImage需要支持参数-importCheckpoint,该参数用于在某一个checkpoint目录里加载HDFS的目录信息,并更新到当前系统,该参数的主要功能在方法doImportCheckpoint中。该方法很简单,通过读取配置的checkpoint目录来加载fsimage文件和日志文件,然后利用saveFSImage(下面讨论)保存到当前的工作目录,完成导入。

(5)loadFSImage用来在多个目录中选择最新的fsimage和edit来载入,最新以及fsimage和edit的一致性由fstime保证,载入过程中对NameNode崩溃的处理要分析saveFSImage的过程在明白。

(6)saveFSImage()的功能正好相反,它将内存中的目录树持久化,很自然,目录树持久化后就可以把日志清空。saveFSImage()会创建edits.new,并把当前内存中的目录树持久化到fsimage.ckpt(fsimage现在还存在),然后重新打开日志文件edits和edits.new,这会导致日志文件edits和edits.new被清空。最后,saveFSImage()调用rollFSImage()方法。

rollFSImage()上来就把所有的edits.new都改为edits(经过了方法saveFSImage,它们都已经为空),然后再把fsimage.ckpt改为fsimage。

(7)saveFSImage和loadFSImage为了考虑NameNode突然崩溃的情况使磁盘固化操作得以回滚创建了中间状态,中间状态的描述方式就是在磁盘上建立临时文件。

转载于:https://www.cnblogs.com/JohnLiang/archive/2011/11/10/2244392.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解 Visual C# 数据库编程

详解 Visual C# 数据库编程 ******2007-11-05 14:34关于数据库编程,微软提供了一个统一的数据对象访问模型,在Visual Studio6.0中称为ADO,在.NET中则统一为ADO.NET,掌握ADO.NET就等于掌握了数据库编程的核心。 针对数据库编程始终是程序设计语…

swift - 根试图控制器的手势返回冲突 - push 新的tabbar控制器手势冲突

1. 禁用手势 和开启手势extension JYRTSShopListController: UIGestureRecognizerDelegate {/// 禁止使用手势返回func forbidhenSideBack() {self.isCanSideBack falseif (self.navigationController?.responds(to:#selector(getter: self.navigationController?.interacti…

Acer 4750 安装黑苹果_黑苹果系统安装通用教程图文版

在开始之前,不管你要安装的是台式组装机,台式品牌机,一体机,还是笔记本,都要大概了解一下硬件信息。因为黑苹果的安装确实比安装Windows的系统要复杂的多。不管是前期准备工作,安装,还是安装之后…

IIS7中使用集成模式时出现HttpException

症状:在iis7在使用集成模式的Pool可能出现HttpException,而程序在经典模式下能正常运行. 解决方法:http://mvolo.com/blogs/serverside/archive/2007/11/10/Integrated-mode-Request-is-not-available-in-this-context-in-Application_5F00_Start.aspx 转载于:https://www.cnbl…

教你学会七种维护服务器安全最佳技巧

导读: 你的计算机上是否存在有至关重要的数据,并且不希望它们落入恶人之手呢?当然,它们完全有这种可能 。而且,近些年来,服务器遭受的风险也比以前更大了.越来越多的病毒,心怀不轨的黑客,以及那些商业间谍都将服务器作为了自己的目标.很显然,服务器的安全问题是不容…

mysql 快速生成百万条测试数据

转自:http://www.cnblogs.com/jiangxiaobo/p/6101072.html 1、生成思路 利用mysql内存表插入速度快的特点,先利用函数和存储过程在内存表中生成数据,然后再从内存表插入普通表中2、创建内存表及普通表 CREATE TABLE vote_record_memory (id I…

自动化专业学python有用吗-马哥教育官网-专业Linux培训班,Python培训机构

今天小编要来说一下Python自动化的学习思路, 对于刚刚进入的测试行业的人来说,未来该怎么样朝着自动化方向发展,即使接触到了自动化测试,又该从何下手去学呢? 简单的说, 做测试做的好,会了接口&…

java JVM

每一个Java虚拟机都由一个类加载器子系统(class loader subsystem),负责加载程序中的类型(类和接口),并赋予唯一的名字。每一个Java虚拟机都有一个执行引擎(execution engine)负责执…

马化腾联手10余位科学家发起科学探索奖,腾讯基金投入10亿元启动资金

11月9日消息,据腾讯科技报道,腾讯基金会于腾讯公司成立20周年之际宣布,腾讯公司董事会主席兼首席执行官,腾讯基金会发起人马化腾,与北京大学教授饶毅,携手杨振宁、毛淑德、何华武、邬贺铨、李培根、陈十一、…

给Domino系统管理员的十二项建议

Domino系统管理员的日常工作就是维护Domino系统的正常运行。以下简要说明了管理员所必做的一些工作。对于系统管理员,特别是新建系统的管理员来说,这些建议能帮助他们完成基本的维护工作。 根据许多资深的Domino管理员和咨询人员的经验,我们对…

delphi 软件在线人数统计_8款值得学习的科研论文作图软件

写在前面科研绘图在国外已经非常流行,且被高度重视,国内科研人员也越来越重视科研方面的绘图。不少科研工作者,包括在读的博士生、研究生等可能都有这样的体会:千辛万苦得来的实验结果,不知道该如何展现给别人?曾经有…

技术管理—管理书籍推荐

技术出身,考虑接触下管理方面的知识。也许管理真的适合你,角色认知角色实践角色胜任!最后爱上它! 我最喜欢的一本书--高效能人士的七个习惯 作者:史蒂芬柯维(Stephen Richards Covey) 该…

JS 几种数据类型及其转换

ECMAScript 标准定义了 7 种数据类型: Number;String;Boolean;Symbol;Null;Undefined;Object 。通常,数值、字符串、布尔值、undefined和null这五种类型,合称为简单类型的值&#xf…

网络虚拟化有几种实现方式_停车场管理系统的防砸车功能有几种方式?如何实现?...

原标题:停车场管理系统的防砸车功能有几种方式?如何实现?前言0101正文一、压力波防砸装置也叫遇阻防砸,主要是安装遇阻返回装置,当道闸杆下落过程中接触到车辆或者行人(接触力度是可以调节的),装置道闸杆底…

Socket 死连接详解

当使用 Socket 进行通信时,由于各种不同的因素,都有可能导致死连接停留在服务器端,假如服务端需要处理的连接较多,就有可能造成服务器资源严重浪费,对此,本文将阐述其原理以及解决方法。 在写 Socket 进行通…

[Swift]LeetCode1146. 快照数组 | Snapshot Array

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址&a…

aspnet中gridview文本只显示开始几个文本_软网推荐:三个小软件 轻松解决文本操作难题...

TXT文本操作在Windows操作中算是比较容易的事了,但简单的文本操作也会遇到难题。例如,对于我们反复需要使用的多个信息,如果仅靠CtrlC和CtrlV来回复制、粘贴,效率会极低;再如,对于一些软件组件中显示的文本…

刚被IBM收购的红帽,它的下一站是中国

前不久IBM斥资340亿美元收购红帽的新闻震惊了所有人,这个金额是互联网上第三大交易,也是开源史上最大交易。这个收购背后到底有哪些目的?红帽接下来会做什么?11月6日红帽在北京举办红帽论坛,向外界介绍了红帽的想法。 …

验证DetailsView插入数据不为空

验证DetailsView插入数据不为空,在对象数据源ObjectDataScource(ChannelDS)的Inserting事件中写如下代码:protected void ChannelDS_Inserting(object sender, ObjectDataSourceMethodEventArgs e) { string name "";…

为什么onenote一直在加载_OneNote:科研笔记独一无二的无敌利器

每个人都梦想着自己有超乎常人的记忆力,拥有者过目不忘的技能,从此走向人生巅峰……然而我们都不是那样的人,在这个高速发展的数字新信息时代,进行有效的记忆,保存我们随时到来的灵感等,这就需要我们进行笔…