前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HDFS元数据管理:fsimage&edits

HDFS元数据管理:fsimage&edits

作者头像
Eights
发布2020-07-10 11:55:23
2.5K0
发布2020-07-10 11:55:23
举报
文章被收录于专栏:Eights做数据Eights做数据

本篇文章大概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
复制
# 基本使用
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
复制
    <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
复制
# 基本使用
hdfs oev -i edits文件 -o 文件输出路径 -p 文件类型

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

截取文件

代码语言:javascript
复制
<?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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档