(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

Hadoop_NameNode_代码分析_目录树(2)相关推荐

  1. 决策树模型回归可视化分析_回归树分析与sklearn决策树案例!

    文 | 菊子皮 (转载请注明出处)同名B站:AIAS编程有道 「摘要:」 决策树是非常基础的算法,其不仅能够进行分类还可以进行回归处理,也就是回归树.要想提高决策树的性能还需要做好剪枝的工作. 「关键 ...

  2. python下三角代码分析_空间分析:2-3。用Python生成Delaunay三角形,23Python,德劳内

    这篇看怎么用程序生成德洛内三角形. Python3,引用了shapely包,其中triangulate是生成德洛内三角形的方法. from shapely.ops import triangulate ...

  3. Odrive_0.5.5运行代码分析_(三)_GPIO详解

    开始 概览 Gpio对象 `config`函数 `subscribe`函数 `unsubscribe`函数 杂项函数 main.cpp中的gpio相关 概览 odrive对stm32的gpio和gpi ...

  4. c++入门笔记自己整理+代码分析附目录(下)

    Giraffe Academy c++入门笔记(下) switch语句 while循环 猜谜游戏 for循环 指数函数 二维数组&嵌套循环 注释 *指针(变量) *类&对象 *构造函数 ...

  5. android n进入分屏代码分析_不只是分屏多任务,Android N 的这些特性也与你有关...

    本文来自 TECH2IPO / 创见,作者@DavidZh 2016 年 Google I/O 大会开放注册之后,Google 出人意料地放出了下一代移动操作系统 Android N 的开发者版本. ...

  6. android n进入分屏代码分析_智慧分屏为“何物”?华为MatePad Pro解锁便捷又高效的新姿势...

    [PConline杂谈]在上期为大家介绍了华为MatePadPro的全新升级的平行视界功能后,这次我又来给大家分享智慧分屏的使用心得啦!首先,大家的疑问点可能是--什么是智慧分屏? 简单点讲,就是做到 ...

  7. java 马士兵 io 代码分析_学习笔记-马士兵java- (IO初步)流

    1. Java 流式输入/输出原理: a. 在JAVA程序中,对于数据的输入/输出操作以"流"(stream)方式进行:J2SDK 提供了各种各样的"流"类,用 ...

  8. AndroidStudio_百度人脸识别离线SDK_代码分析_使用流程_随时更新---Android原生开发工作笔记217

    打开百度的人脸识别的离线识别SDK 的案例,可以看到有个闸机模式, 可以看到上面这个类就是,识别人脸用的.闸机模式下识别人脸的类. 识别流程是这样的: 这里调用 FaceSDKManager 进行摄像 ...

  9. android n进入分屏代码分析_平板电脑全面进入多任务时代,Android N原生支持分屏显示...

    去年十月苹果WWDC上发布iOS9首次原生支持iPad平板电脑的分屏显示,希望通过大屏多任务iPad产品,向微软的Surface为代表的Windows10平板PC发起挑战,撬开商务和企业级市场.近日据 ...

最新文章

  1. Spring cloud——Hystrix 原理解析
  2. python面向对象中的类
  3. python列表操作符_python——列表操作符
  4. 数值运算python嵩天_python语法_算数运算+赋值运算符+比较运算符+逻辑运算符
  5. ElasticSearch 5.5.3 Docker化部署
  6. linux 添加永久路由的几种方法。
  7. Flex 与.net 进行通信可以通过Fluorine(fluorinefx),WebORB For .net,Socket
  8. typecast java_Delphi设置无效的Typecast
  9. 2021-01-29 大数据课程笔记 day9
  10. GPS之家论坛最新地图下载精选 汇集论坛精华 不断更新中(2013.3.30)
  11. 第三方软件测试环境搭建步骤流程
  12. 围观Razavi和Sansen打架——电流并联反馈
  13. Netty 解决TCP粘包/半包使用
  14. Sketchup2019安装包安装教程
  15. 同一网络俩台计算机连接,两台电脑连接同一个wifi算是局域网么
  16. 免杀横向移动工具WMIHACKER
  17. autoit临时资料——学习的部分会更新
  18. 『Kubernetes』Linux安装K8S集群过程笔记
  19. Could not get a resource from the pool 错误解决
  20. 4、Javaweb_JavaScript DOM BOM 事件

热门文章

  1. tp5 php7 报500,记一次TP单元测试报500错误的问题
  2. dump java崩溃自动 不生成_基于Excel和Java自动化工作流程:发票生成器示例
  3. docker运行随机分配端口
  4. MySQL预读失效_华为云MySQL新增“逻辑预读”特性,轻松解决线性预读失效问题...
  5. 计算机报名显示事务已被锁死,ORA-01591错误处理: 锁定已被有问题的分配事务处理20.18.156406挂起(转载)...
  6. APP:分享六款非常实用的冷门APP软件,值得一试!
  7. Java 13,最新最全新特性解读
  8. 最实用前端开发框架对比评测
  9. linux库引入之动态库静态库(生成和使用)
  10. python3 selenium安装教程_Python3爬虫利器之Selenium的安装