Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HDFS元数据管理:fsimage&edits

HDFS元数据管理:fsimage&edits

作者头像
Eights
发布于 2020-07-10 03:55:23
发布于 2020-07-10 03:55:23
2.8K00
代码可运行
举报
文章被收录于专栏:Eights做数据Eights做数据
运行总次数:0
代码可运行

本篇文章大概2353字,阅读时间大约6分钟

介绍HDFS的元数据管理机制,说明fsimage文件和edits的作用,给出解析fsimage文件和edits文件的demo

HDFS是一个分布式存储服务,是Hadoop生态的存储基石。核心的服务包含两个:

  • NameNode:集群的leader节点,负责管理namespace,维护副本策略,记录block块的信息,处理客户端读写请求等工作
  • DataNode:集群的follower节点,负责实际存储数据,负责数据块的读写工作

HDFS可以认为是一个图书馆,DataNode则是书架,而NameNode就是寻找到需要书籍的图书馆管理系统。

1

NameNode如何管理元数据

存储数据的方式来看,要么放到内存中,要么放到磁盘上。HDFS作为一个分布式存储服务,需要处理客户端大量的CRUD请求

  • 元数据放入内存中,可以进行高效的数据查询以快速响应客户端的请求,如果namenode发生故障,则元数据会丢失
  • 元数据放入磁盘中,安全性较高但是无法快速响应客户端的请求

综上,HDFS采用了内存+磁盘的方式进行元数据的管理,即内存->NameNode节点内存,磁盘->Fsimage文件。并且为了保证元数据在增删改操作下,内存和磁盘中元数据的一致性及操作效率,NameNode引入了edits文件记录HDFS元数据的增删改操作。

HDFS元数据管理流程图(NameNode + 2NN)

Namenode会记录客户端的元数据增删改操作请求,记录操作日志,更新滚动日志。

2NN工作流程:

  • 询问NN是否需要进行checkpoint,如果需要则请求执行checkpoint
  • NN滚动正在写的edits日志
  • 将滚动好的edits文件和fsiamge文件拷贝到2NN
  • 2NN加载获得的edits和fsimage,进行合并操作,生成fsimage.chk文件
  • 拷贝fsimage.chk文件到NN,NN对其进行重命名为fsimage

这里可以看出2NN并不是NN的一个热备,只是减轻了NN的元数据合并开销。2NN不是热备,不是热备,不是热备。

2

Fsimage&Edits文件解析

为什么要解析fsimage和edits文件?

  • 在实际的生产环境中,Hadoop集群的小文件问题是不可忽视的,通过对fsimage文件的解析分析,可以获取当前集群中的小文件情况,进行针对性的进行文件合并处理,使集群保持健康的状态
  • 如果发生了删数据带-skipTrash的情况,在一定时间内,可以通过手动修改edits文件的方式,降低数据丢失的损失

CDH集群在HDFS配置中查一下dfs.name.dir配置的目录,该目录文件如下

  • fsimage,checkpoint生成,包含了目录及文件相关信息
  • edits,存储了客户端的增删改操作记录
  • seen_txid,保存了最新滚动完成的一个edits文件名中的数字后缀
  • VERSION,NN的相关信息

Fsimage文件解析

hdfs oiv命令 - Offline Image Viewer

使用指定的processor解析hdfs的fsimage文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 基本使用
hdfs oiv -i fsimage文件 -o 文件输出路径 -p 文件类型

# 解析为XML
hdfs oiv -i fsimage_0000000000000000229 -o /tmp/fsimage.xml -p XML

# 解析为csv文件
hdfs oiv -i fsimage_0000000000000000229 -o /tmp/fsimage.csv -p Delimited

截取一个inode

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <inode>
      <id>16388</id>
      <type>FILE</type>
      <name>test.txt</name>
      <replication>3</replication>
      <mtime>1593600792202</mtime>
      <atime>1593600790816</atime>
      <preferredBlockSize>134217728</preferredBlockSize>
      <permission>root:supergroup:0644</permission>
      <blocks>
        <block>
          <id>1073741825</id>
          <genstamp>1001</genstamp>
          <numBytes>11</numBytes>
        </block> 
      </blocks>  
      <storagePolicyId>0</storagePolicyId>
    </inode>

可以发现fsimage文件记录了数据块的相关信息(做集群小文件分析并不用XML)

  • name文件名称
  • replication备份数
  • mtime最后修改时间
  • atime最后访问时间
  • numBytes文件大小

Edits文件解析

hdfs oev命令 - Offline edits viewer

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 基本使用
hdfs oev -i edits文件 -o 文件输出路径 -p 文件类型

# 解析为XML
hdfs oev -i edits_0000000000000000229-0000000000000000229 -o /tmp/edits.xml -p XML

截取文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<EDITS>
  <EDITS_VERSION>-63</EDITS_VERSION>
  <RECORD>
    <OPCODE>OP_START_LOG_SEGMENT</OPCODE>
    <DATA>
      <TXID>229</TXID>
    </DATA>
  </RECORD>
</EDITS>

这里特别需要注意的是OPCODE标签,记录的是操作的类型,通过修改edits文件恢复hdfs误删除数据的原理,也是将OPCODE标签的删除操作改为其他安全的操作,然后还原成二进制的edits文件并进行替换

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Eights做数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
快速学习-NameNode和SecondaryNameNode
思考:NameNode中的元数据是存储在哪里的? 首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage。 这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。 但是,如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits的合并。 NN和2NN工作机制,如图3-14所示。
cwl_java
2020/02/19
5160
HDFS中Fsimage,Edits详解(6)
本篇博客,小菌为大家带来的是HDFS中NameNode的Fsimage与Edits的详解。
大数据梦想家
2021/01/22
1.7K0
HDFS中Fsimage,Edits详解(6)
Hadoop学习指南:探索大数据时代的重要组成——HDFS(下)
(1)客户端通过Distributed FileSystem 模块向NameNode 请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。 (2)NameNode返回是否可以上传。 (3)客户端请求第一个 Block上传到哪几个DataNode服务器上。 (4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。 (5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用 dn2,然后dn2调用dn3,将这个通信管道建立完成。 (6)dn1、dn2、dn3逐级应答客户端。 (7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存), 以Packet 为单位,dn1 收到一个Packet 就会传给 dn2,dn2 传给 dn3;dn1 每传一个 packet 会放入一个应答队列等待应答。 (8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务 器。(重复执行3-7步)。
老虎也淘气
2024/01/30
2230
Hadoop学习指南:探索大数据时代的重要组成——HDFS(下)
HDFS元信息管理的核心技术与实现
HDFS(Hadoop Distributed File System)是大数据领域中一种核心分布式文件系统,以高可靠性和高扩展性为特点,为海量数据存储提供了高效解决方案。具备高度容错性,通过分布式架构实现数据的高效存储与管理,HDFS采用分块存储与冗余副本策略,确保数据的高可用性与持久性,同时支持高吞吐量的数据访问,满足大数据量处理对性能与稳定性的需求,适用于大规模数据存储和处理场景,特别是读多写少的场景。
童子龙
2025/03/19
2250
HDFS元信息管理的核心技术与实现
Hadoop之hdfs体系结构
HDFS 采用的是hostname01/slaves这种主从的结构模型来管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端)、Namenode(名称节点)、Datanode(数据节点)和SecondaryNameNode。
全栈程序员站长
2022/09/01
3820
大数据技术之_04_Hadoop学习_01_HDFS_HDFS概述+HDFS的Shell操作(开发重点)+HDFS客户端操作(开发重点)+HDFS的数据流(面试重点)+NameNode和Seconda
传统硬盘HDD(Hard Disk Drive)传输速率:100MB/s 固态硬盘SSD(Solid State Drive)传输速率:500MB/s 混合硬盘HHD(Hybrid Harddrive)传输速率:300MB/s PCIe固态硬盘SSD(Solid State Drive)传输速率:1500MB/s
黑泽君
2019/03/04
1.4K0
fsimage和edits详解
由于editlog记录了集群运行期间所有对HDFS的相关操作,所以这个文件会很大。
用户4870038
2021/02/05
7310
fsimage和edits详解
大数据-HDFS的元信息和SecondaryNameNode
当 Hadoop 的集群当中, 只有一个 NameNode 的时候,所有的元数据信息都保存在了 FsImage 与 Eidts 文件当中,这两个文件就记录了所有的数据的元数据信息, 元数据信息的保存目录配置在了hdfs-site.xml 当中
cwl_java
2019/12/25
3860
深入浅出学大数据(三)分布式文件系统HDFS及HDFS的编程实践
此系列主要为我的学弟学妹们所创作,在某些方面可能偏基础。如果读者感觉较为简单,还望见谅!如果文中出现错误,欢迎指正~
不温卜火
2021/09/29
1.1K0
HDFS的SecondaryNameNode作用,你别答错
这是道经典的基础面试题,笔者问过面试者很多次(当然也被面试官问过很多次)。从印象看,大约有一半的被面试者无法正确作答,给出的答案甚至有“不就是NameNode的热备嘛”。本文来简单聊聊相关的知识,为节省篇幅,将SecondaryNameNode简称SNN,NameNode简称NN。
王知无-import_bigdata
2020/04/17
1.3K0
Hadoop框架:NameNode工作机制详解
NameNode运行时元数据需要存放在内存中,同时在磁盘中备份元数据的fsImage,当元数据有更新或者添加元数据时,修改内存中的元数据会把操作记录追加到edits日志文件中,这里不包括查询操作。如果NameNode节点发生故障,可以通过FsImage和Edits的合并,重新把元数据加载到内存中,此时SecondaryNameNode专门用于fsImage和edits的合并。
知了一笑
2020/11/02
7950
Hadoop框架:NameNode工作机制详解
HDFS最基础使用
随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。
ha_lydms
2023/10/04
3120
HDFS最基础使用
HDFS——editLog文件
在HDFS中,namenode保存了整个HDFS的元数据信息,而这些数据最终会被持久化到fsimage文件和editLog文件。换而言之,namenode的元数据信息由fsimage和editlog组成。其中,fsimage存放上次checkpoint生成的文件系统元数据,而editLog则存放文件系统的操作日志;也就是用户对目录、文件的每个写操作(包括创建、删除、写入等)都会被记录到editlog文件中。
陈猿解码
2023/02/28
1K0
HDFS——editLog文件
HDFS工作机制和原理
HDFS是一种分部式的文件系统,在他出现以前就已经存在了很多中分布式文件系统,但是他们都是部署在服务器上,需要高的POSIX接口,同时他们默认服务器是稳定的可以提供大量资源。
Tim在路上
2020/08/04
1.3K0
Hadoop重点难点:HDFS读写/NN/2NN/DN
NameNode在内存中保存着整个文件系统的名字空间和文件数据块的地址映射(Blockmap)。如果NameNode宕机,那么整个集群就瘫痪了。
大数据真好玩
2021/10/12
1.2K0
Hadoop重点难点:HDFS读写/NN/2NN/DN
大数据学习(一)-------- HDFS
已经有了很多框架方便使用,常用的有hadoop,storm,spark,flink等,辅助框架hive,kafka,es,sqoop,flume等。
大数据流动
2019/08/08
4860
【愚公系列】2024年02月 大数据教学课程 022-Hadoop的HDFS
HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写。它是一种分布式文件系统,旨在将大量的数据存储在Hadoop集群中的多台机器上。HDFS具有高度容错性,并且设计用于在低成本硬件上部署。它允许高吞吐量的数据访问,并为大数据应用程序提供可扩展的存储。HDFS是Apache Hadoop生态系统的关键组件之一,许多组织使用它来存储和处理大型数据集。
愚公搬代码
2025/06/02
780
【愚公系列】2024年02月 大数据教学课程 022-Hadoop的HDFS
hdfs和yarn高可用对比
总有一天你会笑着说出曾经令你痛苦的事情,毕竟有些东西虽然不是你想要的,但是却是你自找的,表面上是无奈,实际上是懒得去做选择,成功的路只有一条,而失败的路则是各种各样的原因。
SRE运维实践
2021/03/09
1.3K0
Hadoop2.7.6_03_HDFS原理
  分而治之:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析;
踏歌行
2020/10/15
7070
Hadoop2.7.6_03_HDFS原理
大数据面试题(一):HDFS核心高频面试题
1)客户端向namenode请求上传文件,namenode检查目标文件是否已存在,父目录是否存在。
Lansonli
2022/12/12
5670
大数据面试题(一):HDFS核心高频面试题
相关推荐
快速学习-NameNode和SecondaryNameNode
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验