1、HDFS元数据管理机制

问题1:NameNode如何管理和存储元数据?

  • 计算机中存储数据两种:内存或者是磁盘
  • 元数据存储磁盘:存储磁盘无法面对客户端对元数据信息的任意的快速低延迟的响应,但是安全性高
  • 元数据存储内存:元数据存放内存,可以高效的查询以及快速响应客户端的查询请求,数据保存在内存,如果断点,内存中的数据全部丢失。

解决方案:内存+磁盘;NameNode内存+FsImage的文件(磁盘)

新问题:磁盘和内存中元数据如何划分?

两个数据一模一样,还是两个数据合并到一起才是一份完整的数据呢?

  • 一模一样:client如果对元数据进行增删改操作,需要保证两个数据的一致性。FsImage文件操作起来效率也不高。
  • 两个合并=完整数据:NameNode引入了一个edits文件(日志文件:只能追加写入)edits文件记录的是client的增删改操作,不再选择让NameNode把数据dump出来形成FsImage文件(这种操作是比较消耗资源)。

元数据管理流程图

第一阶段:NameNode启动 

  • 第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
  • 客户端对元数据进行增删改的请求。
  • NameNode记录操作日志,更新滚动日志。
  • NameNode在内存中对数据进行增删改。

第二阶段:Secondary NameNode工作

  • Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否执行检查点操作结果。
  • Secondary NameNode请求执行CheckPoint。
  • NameNode滚动正在写的Edits日志。
  • 将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
  • Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
  • 生成新的镜像文件fsimage.chkpoint。
  • 拷贝fsimage.chkpoint到NameNode。
  • NameNode将fsimage.chkpoint重新命名成fsimage。

2、Fsimage与Edits文件解析

NameNode在执行格式化之后,会在/opt/lagou/servers/hadoop-2.9.2/data/tmp/dfs/name/current目录下产生如下文件

  • Fsimage文件:是namenode中关于元数据的镜像,一般称为检查点,这里包含了HDFS文件系统所有目录以及文件相关信息(Block数量,副本数量,权限等信息)
  • Edits文件 :存储了客户端对HDFS文件系统所有的更新操作记录,Client对HDFS文件系统所有的更新操作都会被记录到Edits文件中(不包括查询操作)
  • seen_txid:该文件是保存了一个数字,数字对应着最后一个Edits文件名的数字
  • VERSION:该文件记录namenode的一些版本号信息,比如:CusterId,namespaceID等

(1) Fsimage文件内容

官方地址 

https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoophdfs/HdfsImageViewer.html

因为Fsimg中保存的内容是二进制数据,我们必须通过工具将他进行转化后才能阅读

查看oiv和oev命令

基本语法

hdfs oiv -p 文件类型(xml) -i 镜像文件 -o 转换后文件输出路径

案例实操

[root@linux121 current]$ cd /opt/lagou/servers/hadoop-2.9.2/data/tmp/dfs/name/current

[root@linux121 current]$ hdfs oiv -p XML -i fsimage_0000000000000000265 -o
/opt/lagou/servers/fsimage.xml

[root@linux121 current]$ cat /opt/lagou/servers/fsimage.xml

这样我们打开xml文件就能阅读其内容

问题:Fsimage中为什么没有记录块所对应DataNode?

在内存元数据中是有记录块所对应的dn信息,但是fsimage中就剔除了这个信息;HDFS集群在启动的时候会加载image以及edits文件,block对应的dn信息都没有记录,集群启动时会有一个安全模式(safemode),安全模式就是为了让dn汇报自己当前所持有的block信息给nn来补全元数据。后续每隔一段时间dn都要汇报自己持有的block信息。

(2)Edits文件内容

基本语法

hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径

案例实操

[root@linux121 current]$ hdfs oev -p XML -i edits_0000000000000000266-0000000000000000267 -o /opt/lagou/servers/hadoop-2.9.2/edits.xml

[root@linux121 current]$ cat /opt/lagou/servers/hadoop-2.9.2/edits.xml

备注:Edits中只记录了更新相关的操作,查询或者下载文件并不会记录在内!!

问题:NameNode启动时如何确定加载哪些Edits文件呢?

nn启动时需要加载fsimage文件以及那些没有被2nn进行合并的edits文件,nn如何判断哪些edits已经被合并了呢?

可以通过fsimage文件自身的编号来确定哪些已经被合并。

(3) checkpoint周期

[hdfs-default.xml]

<!-- 定时一小时 -->
<property><name>dfs.namenode.checkpoint.period</name><value>3600</value>
</property><!-- 一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次 -->
<property><name>dfs.namenode.checkpoint.txns</name><value>1000000</value><description>操作动作次数</description>
</property>
<property><name>dfs.namenode.checkpoint.check.period</name><value>60</value><description> 1分钟检查一次操作次数</description>
</property >

3、NameNode故障处理

NameNode故障后,HDFS集群就无法正常工作,因为HDFS文件系统的元数据需要由NameNode来管理维护并与Client交互,如果元数据出现损坏和丢失同样会导致NameNode无法正常工作进而HDFS文件系统无法正常对外提供服务。

如果元数据出现丢失损坏如何恢复呢?

  1. 将2NN的元数据拷贝到NN的节点下(此种方式会存在元数据的丢失。)
  2. 搭建HDFS的HA(高可用)集群,解决NN的单点故障问题!!(借助Zookeeper实现HA,一个Active的NameNode,一个是Standby的NameNode)

Namenode 与 SecondaryNameNode相关推荐

  1. Hadoop之NameNode和SecondaryNameNode工作机制详解

    Hadoop之NameNode和SecondaryNameNode工作机制详解 NN和2NN工作机制 NN和2NN工作机制详解 Fsimage和Edits解析 checkpoint时间设置 1. NN ...

  2. 【Hadoop】HDFS三组件:NameNode、SecondaryNameNode和DataNode

    HDFS主要由三个组件构成,分别是NameNode.SecondaryNameNode和DataNode,其中NameNode和SecondaryNameNode运行在master节点上,DataNo ...

  3. HDFS(下):NameNode和SecondaryNameNode、HDFS工作机制、故障处理、集群安全模式、服役退役节点、集群黑白名单、DataNode多目录详解、HDFS2.x新特性

    接上篇,上篇文章传送门:HDFS(上):HDFS优缺点.HDFS操作.HDFS客户端操作.HDFS的API.HDFS数据流.HDFS的IO流.HDFS读写数据流程.HDFS文件处理详解.windows ...

  4. NameNode 和 SecondaryNameNode: Fsimage 和 Edits 解析、ovi命令、oev命令

    文章目录 NameNode 和 SecondaryNameNode: Fsimage 和 Edits 解析.ovi命令.oev命令 一.SecondaryNamenode, 专门用于 FsImage ...

  5. Hadoop中NameNode和SecondaryNameNode、NN和2NN工作机制、Fsimage和Edits解析、oiv查看Fsimage、oev查看Edits、CheckPoint时间设置

    文章目录 9.NameNode和SecondaryNameNode 9.1NN和2NN工作机制 9.1.1第一阶段:NameNode启动 9.1.2第二阶段:Secondary NameNode工作 ...

  6. Hadoop的NameNode与SecondaryNameNode,DataNode

    NameNode: 主要任务是接收客户端的读写服务, 主要功能: 1,文件ownship和permission 2,文件包含哪些块 3,Block保存在哪个DataNode中(由DataNode每次启 ...

  7. hdfs安全模式退出_浅谈HDFS(二)之NameNode与SecondaryNameNode

    NN与2NN工作机制 思考:NameNode中的元数据是存储在哪里的? 假设存储在NameNode节点的硬盘中,因为经常需要随机访问和响应客户请求,必然效率太低,所以是存储在内存中的 但是,如果存储在 ...

  8. 浅析NameNode/DataNode/SecondaryNameNode源码注释

    NameNode源码注释 /*********************************************************** NameNode serves as both di ...

  9. 移动namenode、secondarynamenode和jobTracker的节点(使其成为独立节点)

    由于集群规模差异较大,对于主节点守护进程的配置也差异很大,包括namenode.辅助namenode和jobtracker.对于一个小型集群来说(几十个节点),可以直接将这些守护进程放到单独的一台机器 ...

最新文章

  1. 1个GPU几分钟搞定强化学习训练,谷歌新引擎让深度学习提速1000倍丨开源
  2. Android中图片的目录
  3. 第三章关系数据库标准语言SQL
  4. php二分法 冒泡 快速排序,PHP 常见算法【冒泡排序, 快速排序, 插入排序, 取舍排序, 二分法查找, .】...
  5. C++《STL和泛型编程》算法accumulate、for_each、sort简单使用例子
  6. 编程基础(三)——体系结构
  7. LINUX使用sed完成文本文件的修改
  8. Atitit 计算软件简史 艾提拉著 目录 1.1. 第二代软件(1959~1965) 高级语言 第三代软件(1965~1971) os 1 1.2. 第四代软件(1971~1989)结构化的程序
  9. 学习日记(三)利用Arduino读取加速度传感器信号并采用NRF24L01无线传输
  10. 『互联网架构』kafka集群搭建和使用
  11. Windows Server 2016 (Updated Feb 2018) (x64)下载
  12. android逆向神器,Android MT管理器(APK逆向修改神器) v2.9.8.0 正式版 / v2.5.0 VIP版
  13. javascript获取本周、本月、本季度、本年时间
  14. http 请求的7 种方法
  15. CHIL-SQL-GROUP BY 语句
  16. didi VirtualApk 框架的使用
  17. 用计算机弹牛奶面包曲谱,牛奶面包-亲爱的热爱的片尾曲-双手简谱五线谱.pdf...
  18. Linux性能优化(十六)——中断绑定
  19. 【Java】数组元素的拷贝
  20. 罗斯蒙特流量计调试需要考虑的两大方面

热门文章

  1. Web3D 从入门到跑路 · 3D 初体验
  2. Android默认设置MTP模式
  3. 微软今天发布的紧急安全公告 MS08-067
  4. SonarQube代码质量管理
  5. vue阻止浏览器默认事件
  6. EC200 EC600 EC20接入工业互联网云平台
  7. JVM常见命令之jstack
  8. 解释机器学习中的熵、联合熵、条件熵、相对熵和交叉熵
  9. C++实现二维离散傅里叶变换
  10. USB插座外壳接地的处理和emi,esd考虑