转:https://blog.csdn.net/qq_37334135/article/details/78162285

一. NameNode 元数据目录结构

  1. 在/root/hd/dfs/name/current目录下。

    /root/hd/dfs/name/current
    -rw-r--r--. 1 root root 1048576 1月   3 23:40 edits_0000000000000000323-0000000000000000362
    -rw-r--r--. 1 root root 1048576 1月   4 15:47 edits_0000000000000000363-0000000000000000363
    -rw-r--r--. 1 root root     523 1月   4 16:45 edits_0000000000000000364-0000000000000000372
    -rw-r--r--. 1 root root     100 1月   4 17:45 edits_0000000000000000373-0000000000000000375
    -rw-r--r--. 1 root root 1048576 1月   4 17:45 edits_0000000000000000376-0000000000000000376
    -rw-r--r--. 1 root root 1048576 1月   4 22:18 edits_0000000000000000377-0000000000000000377
    -rw-r--r--. 1 root root      42 1月   4 23:02 edits_0000000000000000378-0000000000000000379
    -rw-r--r--. 1 root root 1048576 1月   4 23:02 edits_inprogress_0000000000000000380
    -rw-r--r--. 1 root root    1159 1月   4 22:18 fsimage_0000000000000000376
    -rw-r--r--. 1 root root      62 1月   4 22:18 fsimage_0000000000000000376.md5
    -rw-r--r--. 1 root root    1159 1月   4 23:02 fsimage_0000000000000000379
    -rw-r--r--. 1 root root      62 1月   4 23:02 fsimage_0000000000000000379.md5
    -rw-r--r--. 1 root root       4 1月   4 23:02 seen_txid
    -rw-r--r--. 1 root root     219 1月   4 22:18 VERSION

    有VERSION,see_txid,frimage,edits.这些文件。

  2. fsimage:元数据镜像文件。就是将内存中的元数据信息保存到磁盘,需要的时候就再从磁盘读取出来到内存。
  3. edits:操作hdfs的日志文件
  4. fstime:保存最后一次的还原点时间

VERSION文件内容是:

#Fri Jan 04 22:18:53 CST 2019
namespaceID=436986712
clusterID=CID-4c506078-e726-4ee2-bcf0-5cd0e8d057b2
cTime=1545556579425
storageType=NAME_NODE
blockpoolID=BP-1936340378-192.168.146.137-1545556579425
layoutVersion=-63
  •  namespaceID :是文件系统的唯一标识符,在文件系统首次格式化之后生成的
  • clusterID :是系统生成或手动指定的集群 ID
  •  cTime :表示 NameNode 存储时间的创建时间
  •  storageType :说明这个文件存储的是什么进程的数据结构信息(如果是 DataNode,storageType=DATA_NODE)
  •  blockpoolID:是针对每一个 Namespace 所对应的 blockpool 的 ID,上面的这个 BP-1936340378-192.168.146.137-1545556579425就是在我的 nameserver1 的 namespace下的存储块池的 ID,这个 ID 包括了其对应的 NameNode 节点的 ip 地址。
  • layoutVersion :表示 HDFS 永久性数据结构的版本信息, 只要数据结构变更,版本号也要递减,此时的 HDFS 也需要升级,否则磁盘仍旧是使用旧版本的数据结构,这会导致新版本的 NameNode 无法使用

注:当客户端对hdfs中的文件进行新增或者修改操作,操作记录首先被记入edits日志文件中,当客户端操作成功后,相应的元数据会更新到内存meta.data中 
namenode如何管理元数据 
流程图:

分析: 
1、当客户端向namenode发出更新元数据的请求时,namenode会根据更新的数据内容存放位置等从而来更新好元数据。而每次做的更新操作都会被记录到操作日志文件中(edits)。 
2、为了防止namenode挂掉数据丢失从而准备了一个secondaryNamenode,从而可以将namenode上的数据备份。它会每隔一段时间(默认是30分钟)去询问一次namenode,看看是否需要合并(checkpoint),当namenode上的操作日志文件大到一定的时候会告诉secondaryNamenode需要合并。 
3、此时namenode会滚动当前在操作的日志文件edits.inprogress(目的是多下载一些到secondaryNamenode)。 
4、secondaryNamenode会将edits文件和镜像文件fsimage下载下来,接着会根据操作日志文件根据一些算法计算出元数据从而来和镜像文件(保存了namenode的元素据)进行合并存到内存中。 
5、secondaryNamenode会将内存中合并后的的元数据存到硬盘,序列化上传到namenode,最后namenode会将secondaryNamenode上传的元数据存到镜像文件中,这样镜像文件就达到了备份的效果,同时secondaryNamenode上也有对应的元数据,即使namenode挂掉我们也可以复制secondaryNamenode上的数据到namenode。 
一些问题 
注1:namenode和secondary namenode的工作目录存储结构完全相同,所以,当namenode故障退出需要重新恢复时,可以从secondary namenode的工作目录中将fsimage拷贝到namenode的工作目录,以恢复namenode的元数据。 
注2:checkpoint时,把正在写的滚动一下,然后把fsimage和日志文件下载到secondaryNamenode机器上,但是只有第一次才会下载fsimage文件,因为这个时候fsimage不是很大,下载效率不会慢,以后就只会下载日志文件了,因为每隔一定时间和条件就会下载所以下载量也不会太大。 
注3:当namenode宕机的时候,hdfs是否还能正常工作?答案是不能,因为secondaryNamenode虽然有元数据但是并不能代替namenode,比如namenode能对客户端做响应而secondaryNamenode就不行,也不能更新数据,只起到了备份元数据的作用。 
注4:如果namenode的硬盘损坏(或者说是工作目录没了)那么元数据还能恢复吗?答案是能恢复大部分数据,上面第五步已经给出了解释,我们可以将secondaryNamenode的目录复制粘贴给它,因为两者的结构数据是一样的。但是如果操作过快,比如我刚创建了一个文件夹。然后删掉了目录,这个时候secondaryNamenode都没来得及下载备份,所以这条数据不能回复。 
注5:配置namenode工作目录参数的时候,最后将namenode的工作目录配在多块磁盘上,同时往2块磁盘上写数日志,内容是一样的。如下

<property>
    <name>dfs.name.name.dir</name>
    <value>/root/hadoop/hdf1,/root/hadoop/hdf2</value>
</property>

三,edits 和 fsimage 文件的概念

1. fsimage文件 
fsimage 文件其实是 Hadoop 文件系统元数据的一个永久性的检查点,其中包含 Hadoop 文件系统中的所有目录和文件 idnode 的序列化信息;

2. edits文件 
存放的是 Hadoop文件系统的所有更新操作的路径,文件系统客户端执行的所以写操作首先会被记录到 edits文件中。

Hadoop学习(七)---namenode结点的详细讲解相关推荐

  1. String类中方法详细讲解

    学习目标: String类方法详细讲解 学习内容: 1.value属性 了解String类的value属性: private final char value[] ; //String类的不可变特性就 ...

  2. Docker学习七:使用docker搭建Hadoop集群

    本博客简单分享了如何在Docker上搭建Hadoop集群,我的电脑是Ubuntu20,听同学说wsl2有些命令不对,所以建议在虚拟机里按照Ubuntu或者直接安装双系统吧 Docker学习一:Dock ...

  3. Python的零基础超详细讲解(第七天)-Python的数据的应用

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

  4. 《Unity API常用方法和类详细讲解—Siki学院》课程学习笔记02

    <Unity API常用方法和类详细讲解-Siki学院>课程学习笔记02 课时10 GameObject.Component和Object的千丝万缕的关系 一个游戏由多个场景组成,一个场景 ...

  5. 《Unity API常用方法和类详细讲解—Siki学院》课程学习笔记03

    <Unity API常用方法和类详细讲解-Siki学院>课程学习笔记03 课时18-20协程及其执行 1.使用Coroutine实现颜色动画渐变 void Update(){if (Inp ...

  6. c语言图片透明度混合,【PS CC 2018 学习连载 19】如何让图层与图层之间融合的更好?不透明度和混合模式详细讲解...

    原标题:[PS CC 2018 学习连载 19]如何让图层与图层之间融合的更好?不透明度和混合模式详细讲解 说起图层,根据之前的连载,已经学习了不少内容,比如: 但以上内容,都只是对图层的理解以及对指 ...

  7. java学习笔记day07 成员变量与局部变量、形式参数、匿名对象、封装、private、this、构造方法、类详细讲解、static

    java学习笔记day07 1.成员变量和局部变量的区别 定义变量的注意事项 2.形式参数⭐ [P175] 形参是个类名,要的其实是一个对象 3.匿名对象(了解即可) 4.封装 class Stude ...

  8. 深度学习:NiN(Network In Network)详细讲解与代码实现

    深度学习:NiN(Network In Network)详细讲解与代码实现 网络核心思想 1*1卷积 NiN块的作用 全局池化(Global Average Pooling) 基于NiN的服装分类(P ...

  9. HTML5div css入门案例,div+css教学教案(学习入门到精通~)详细讲解.doc

    | div+cssHYPERLINK "/"教程(入门到精通) 目录: 一.div+css教程(入门到精通)详细讲解 二.DIV+CSS网页布局常用基础知识 三.div+css常用 ...

最新文章

  1. MyEclipse 8.5安装Aptana
  2. 史上最全的前端开发面试题(含详细答案)
  3. php如何按日期统计,关于按日获取统计信息:按日期获取统计信息 – 日期时间列 – mysql / php...
  4. 通过德雷福斯模型探寻成长之路
  5. list.stream().map().collect(Collectors.toList())
  6. Python学习之——列表、字典、实验低配版非诚勿扰
  7. poi根据模版导出多页word,带插入图片,并压缩下载
  8. WPF使用Blend
  9. 淘宝客订单查询API参数说明
  10. CF417D Cunning Gena
  11. 论文阅读笔记--Federated Continual Learning with Weighted Inter-client Transfer
  12. 【10月31日】机器学习实战(二)决策树:隐形眼镜数据集
  13. Quantopian单因子分析工具:Alphalens
  14. 复盘|接口自动化测试框架建设的经验与教训
  15. 某项目性能测试断流问题排查
  16. Shopro商城,基于Fastadmin和Uniapp进行开发的多平台(微信公众号、微信小程序、H5网页、Android-App、IOS-App)购物商城
  17. ThinkPHP5.0商城项目目录搭建(菜鸟)
  18. VMware workstation虚拟硬盘、类型分析
  19. 非常棒的loading制作教程
  20. H.266/VVC帧间预测技术学习:几何划分模式(Geometric partitioning mode, GPM)

热门文章

  1. 前端知识总结汇总!(HTML、CSS、JS、jQuery、vue、微信小程序)
  2. IDEA2016 license server 激活
  3. Diffusion Model
  4. SQLTRACE的几个用法
  5. 这可能是我见过最好的博客系统!(附源码)
  6. ReentrantLock实现原理(可重入锁 )
  7. python-根据语音识别让无字幕视频自动生成字幕,附srt字幕文件
  8. 如何记住OSI七层协议模型,脑洞大开有木有?
  9. 手把手做一个JSP入门程序(一):程序基本介绍(JSP)
  10. Could not find artifact com.oracle:ojdbc6:pom:11.2.0.3 in central