HDFS中的NAMENODE元数据管理(超详细)
元数据管理
- 元数据是什么
- 元数据管理概述
- 内存元数据
- 元数据文件
- fsimage内存镜像文件
- edits log编辑日志
- namenode加载元数据文件顺序
- 元数据管理相关目录文件
- 元数据相关文件
- VERSION
- seen_txid
- 元数据文件查看(OIV,OEV)
- SecondaryNameNode介绍
- checkpoint机制
- SNN Checkpoint--触发机制
- 元数据文件恢复
- namenode存储多目录
- 从SNN中恢复
元数据是什么
- 在HDFS中,元数据主要值得是文件相关的元数据,有namenode管理维护。从广义的角度来说,因为namenode还需要管理众多的DataNode结点,因此DataNode的位置和健康状态信息也属于元数据
元数据管理概述
在hdfs中,文件相关的元数据具有两种类型:
- 文件自身属性信息
文件名称、权限、修改时间,文件大小、复制因子、数据块大小 - 文件块位置映射信息
记录文件块和DataNode之间的映射信息,即哪个块位于哪个结点上

按照存储形式分别为内存元数据和元数据文件两种,分别存在内存和磁盘上
内存元数据
- 为了保证用户操作元数据交互高效,延迟低,namenode把所有的元数据都存储在内存中,我们叫做内存元数据。内存中的元数据是最完整的,包括文件自身属性、文件块位置映射信息
- 但是内存的致命问题是,断点数据丢失,数据不会持久化。因此namenode又辅佐了元数据文件来保证运输局的安全完整
元数据文件
元数据文件有两种:fsimage内存镜像文件,Edits log编辑日志
fsimage内存镜像文件
- 是内存元数据的一个持久化的检查点。但是fsimage中仅包含hadoop文件中文件自身属性相关的元数据信息,但不包含文件块位置的信息。文件块位置信息只存储在内存中,是由DataNode启动加入集群的时候,向DataNode进行数据块的汇报得到的,并且后续间断指定时间进行数据块报告
- 持久化的动作是数据从内存到磁盘的IO过程。会对namenode正常服务造成一定的影响,不能频繁的进行持久化
edits log编辑日志
为了避免两次持久化之间数据丢失的问题,又设计了edits log编辑日志文件。文件中记录的是HDFS所有的更改操作(文件创建,删除或修改)的日志,文件系统客户端执行的更改操作首先会被记录到edits文件中

namenode加载元数据文件顺序
- fsimage和edits文件都是经过序列化的,在namenode启动的时候,它会昂fsimage文件中的内容加载到内存中,之后再执行edits文件中各项操作,是的内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作,也是最完整的元数据
- 当客户端对HDFS中的文件进行新增或者修改操作,操作记录首先被计入edits日志文件中,当客户端操作成功后,相应的元数据会更新到内存元数据中。因为fsimage文件一般都很大(GB级别的很常见),如果所有的更新操作都往fsimage文件中添加,这样会导致系统运行的十分缓慢
- HDFS这种设计实现着手于:一时内存中的数据更新、查询快,极大缩短操作响应时间;二是内存中元数据丢失风险颇高(断电T_T),因此辅佐元数据镜像文件(fsimage)+编辑日志文件(edits)的备份机制进行确保元数据的安全
- namenode维护整个文件系统元数据。因此,元数据的准确管理,影响着HDFS提供文件存储服务的能力
元数据管理相关目录文件
-
namenode元数据存储目录由参数:dfs.namenode.name.dir指定
-
格式化完成之后,将会在$hdfs.namenode.name.dir/current目录下创建如下的文件:

-
dfs.namenode.name.dir是在hdfs-site.xml文件中配置的,默认值如下

元数据相关文件
VERSION
- namespaceID/clusterID/blockpollID
这些都是HDFS集群的唯一标识符。标识符被用来防止DataNodes意外注册到另一个集群中的namenode上。这些宝石在联邦(federation)部署中特别重要。联邦模式下,会有多个namenode独立工作。每个namenode提供惟一的命名空阿静(namespaceID),并管理一组唯一的文件块池(blockpoolID)。clusterID将整个集群结合在一起作为单个逻辑单元,在集群中所有节点上都是一样的。 - storageType
说明这个文件存储的是什么进程的数据结构信息。如果是DataNode节点,storageType=DATA_NODE - cTime
namenode存储系统创建时间,首次格式化文件系统这个属性是0,当问文件系统升级之后的时间戳 - layoutVersion
HDFS元数据格式的版本。HDFS升级时会进行更新


seen_txid
- 包含上一次checkpoint时的最后一个事务ID,这不是namenode接受的最后一个事务ID
- seen_txid内容不会在每个事务性操作生都更新,只会在checkpoint时更新
- namenode启动时会检查seen_txid文件,以验证它至少可以加载该数目的事务。如果无法验证加载事务,namenode将终止启动

元数据文件查看(OIV,OEV)
- fsimage文件是hadoop文件系统元数据的一个永久性的检查点,包含hadoop文件系统中的所有目录和文件idnode的序列化信息;对于文件来说,包含的信息有修改的时间、访问时间、块大小和组成一个文件块信息等;而对于目录来说,包含的主要有修改时间,访问控制权限等信息
- oiv是offline image viewer的缩写,可将hdfs fsimage文件的内容转储为人类可读的格式
- 常用命令:hdfs oiv -i fsiamge_00000000000050 -p XML -o fsimage.xml

- edits log文件存放的是hadoop文件系统所有更新的操作记录日志
- 文件系统客户端执行的所有写操作首先会被记录到edits文件中
- oev是offline edits viewer(离线edits查看器)的缩写,该工具不需要hadoop集群处于运行状态
- 命令:hdfs oev -i edits_0000000000000000090-00000000000000000000089 -o edits.xml
- 在输出文件中,每个RECORD记录了一次操作,示例如下:

SecondaryNameNode介绍
- SNN可以减小edits logs文件的大小和得到一个最新的fsimage文件,这样也会减小在namenode上的压力
checkpoint机制
1.checkpoint核心是把fsimage与edits log合并生成一个新的fsimage的过程,然后NN会生成一个新的编辑日志文件:edits new,便于记录后续操作记录
2. SNN会将旧的edits log文件和上次fsimage复制到自己本地(使用HTTP GET方式)
3. SNN首先将fsimage载入到内存,然后一条一条的执行edits文件中的操作,使得内存中的fsimage不断更新,这个过程就是edits和fsimage文件合并。合并结束,SNN将内存中的数据dump生成一个新的fsimage文件
4. SNN将新生的Fimage new文件复制到NN节点。至此刚好是一个轮回,等待下一次checkpoint触发secondarynamenode进行工作,一直这样循环操作

SNN Checkpoint–触发机制
- core-site.xml
dfs.namenode.checkpoint.period=3600 //两次连续的checkpoint之间的时间间隔。默认一小时
dfs.namenode.checkpoint.txns=1000000 //最大没有执行checkpoint事务的数量,满足将强制执行紧急checkpoint,及时尚未达到检查点周期。默认100万事务数量
元数据文件恢复
namenode存储多目录
- namenode元数据存储目录由参数:dfs.namenode.name.dir
- dfs.namenode.name.dir属性可以配置多个目录,各个目录存储的文件结构和内容都完全一样,相当于备份,这样做的好处就是当其中一个目录坏了,也不会影响到hadoop的元数据,特别是当其中一个目录是NFS(网络文件系统network filesystem)之上,及时你这台机器损坏了,元数据也得到保存
从SNN中恢复
- SNN 在checkpoint的收会将fsimage和edits log下载到自己本机上本地存储目录下。并且在checkpoint之后也不会删除
- 如果NN中的fsimage真的出问题了,还是可以用SNN中的fsimage替换一下NN中的fsimage,虽然已经不是最新的fsimage,但是我们可可以将损失减小到最少

相关文章:
HDFS中的NAMENODE元数据管理(超详细)
元数据管理 元数据是什么元数据管理概述内存元数据元数据文件fsimage内存镜像文件edits log编辑日志 namenode加载元数据文件顺序 元数据管理相关目录文件元数据相关文件VERSIONseen_txid 元数据文件查看(OIV,OEV)SecondaryNameNode介绍checkpoint机制SN…...
区块链实验室(14) - 编译FISCO-BCOS
FISCO-BCOS是一种区块链平台,与Hyperledger和Ethereum有些不同,详见FISCO BCOS 区块链 编译FISCO BCOS源码的目的是修改或者新增其中功能模块,进行对比实验,验证新想法、新创意的效果。编译的步骤很简单,按技术文档一…...
for(auto iter:vec) 及 for(auto iter:vec) 的典型用法
【算法知识点】C11 标准引入了 auto 类型说明符。它通过变量的初始值或者表达式中参与运算的数据类型来推断变量的类型。 一、for(auto iter:vec) 的典型用法 #include <bits/stdc.h> using namespace std;int main(){string s;cin>>s;for(auto t:s){cout<<…...
【iosH5开发】IOS浏览器对于Vue3 Element-plus el-input中,input.value.focus无法聚焦问题
【iosH5开发】IOS浏览器对于Vue3 Element-plus el-input中,input.value.focus无法聚焦问题 此次项目遇到了两个问题,一个是在Vue3中el-input的input.value.focus()无法触发,但是在PC或者安卓均可触发。 // 解决方案 // 单纯的触发input.val…...
【2023】华为OD机试真题Java CC++ Python JS Go-题目0257-增强的strstr
题目0257-增强的strstr 题目描述 C 语言有一个库函数: char *strstr(const char *haystack, const char *needle) ,实现在字符串 haystack 中查找第一次出现字符串 needle 的位置,如果未找到则返回 null。 现要求实现一个strstr的增强函数,可以使用带可选段的字符串来模…...
Android 解析ping回复包
目标: 已知多个字符串,形如:“64 bytes from 39.156.66.18: icmp_seq1 ttl50 time29.7 ms” 获取 总Ping时间(XX:XX:XX格式),最小时间,最大时间,平均时间,丢包率,已发送个数…...
在外地ssh远程连接家里ubuntu服务器(Coplar内网穿透)
官网:https://www.cpolar.com/ 步骤: 可以先安装ssh许可(必须先完成,完成后在局域网内就可以连接自己服务器,但还是需要安装cpolar才可以外地连接服务器),参考[B站:Linux (Ubuntu) 如何开启SSH远程登录]((…...
windows创建占用特定端口程序
默认情况下,远程桌面使用的是3389端口。如果您想将远程桌面端口更改为8005,以达到模拟程序占用端口8005的情况,可以执行以下操作: 如执行以下命令,则1,2,3步相同操作可以跳过,直接往…...
【uniapp 定位获取详细位置】
在 uniapp 中获取定位信息方法,具体如下: 1. uni.getLocation 方法(都可): uni.getLocation({type: gcj02,success: function(res) {console.log(经度: res.longitude)console.log(纬度: re…...
后端进阶之路——万字总结Spring Security与数据库集成实践(五)
前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄,vue成神之路★ ★ 解决算法,一个专栏就够了★ ★ 架…...
mysql8查看执行sql记录历史,配置开启sql历史日志general_log
1.概要说明 mysql8默认未开启sql记录历史日志。 2.配置开启general_log 2.1.查看配置 general_log:是否开启sql日志。默认为OFFlog_output:日志输出位置: FILE:输出到文件。默认值TABLE:输出到表。mysql.general_log show v…...
git 版本控制与合并
一 git概述: - Git是一种分布式版本控制系统,用于跟踪和管理软件开发项目中的代码变更。 - 它允许多人协同工作,记录代码历史变更,并轻松管理多个项目版本。 **Git的主要特点**包括: 1. **分布式系统**:…...
【力扣】23. 合并 K 个升序链表 <链表指针、堆排序、分治>
目录 【力扣】23. 合并 K 个升序链表题解方法一:暴力,先遍历取出来值到数组中排序,再生成新链表方法二:基础堆排序(使用优先队列 PriorityQueue)方法三:基础堆排序(使用优先队列 Pri…...
微信小程序真机防盗链referer问题处理
公司使用百度云存储一些资源,然后现在要做防盗链,在CDN加入Referer白名单后发现PC是正常的,微信小程序无法正常访问资源了。然后是各种查啊,然后发现是微信小程序不支持Referer的修改,且在小程序开发工具是Referer是固…...
SpringBoot集成Redisson实现延迟队列
一、场景 1、下单未支付,超过10分钟取消订单 2、货到后7天未评价,自动好评 二、实现方案 1、使用xxl-job 定时任务按时检测,实时性不高 2、使用RabitMQ的插件rabbitmq_delayed_message_exchange插件 3、 redis的过期检测 redis.conf 中…...
思想道德与法治
1【单选题】公民的基本权利是指宪法规定的公民享有的基本的、必不可少的权利。公民的基本权利有不同的类别,公民的通信自由和通信秘密属于 A、人身自由 B、经济社会权利 C、政治权利和自由 D、教育科学文化权利 您的答案:A 参考答案:A 查…...
vue3登录页面
使用了element-plus <template><div class"login-wrapper"><!-- 背景图或者视频 --><div class"background" style"width: 100%; height: 100%; position: absolute; top: 0px; left: 0px;overflow: hidden;z-index:50;&qu…...
SK5代理与IP代理:网络安全守护者的双重防线
一、IP代理与SK5代理简介 IP代理: IP代理是一种通过中间服务器转发网络请求的技术。客户端向代理服务器发出请求,代理服务器将请求转发至目标服务器,并将目标服务器的响应返回给客户端。IP代理的主要功能是隐藏用户的真实IP地址,提…...
线程间的同步、如何解决线程冲突与死锁
一、线程同步概念: 线程同步是指在多线程编程中,为了保证多个线程之间的数据访问和操作的有序性以及正确性,需要采取一些机制来协调它们的执行。在多线程环境下,由于线程之间是并发执行的,可能会出现竞争条件…...
8.4一日总结
1.远程仓库的提交方式(免密提交) a.ssh:隧道加密传输协议,一般用来登录远程服务器 b.使用 git clone 仓库名 配置(生成公私钥对) ssh-Keygen [-t rsa -C 邮箱地址] 通过执行上述命令,全程回车,就会在~/.ssh/id_rsa(私钥)和id_rsa.pub(公钥),私钥是必须要保存好的,并不能…...
35岁程序员收藏!转行大模型,抢占高薪风口,从入门到高薪 Offer 全攻略
35岁程序员收藏!转行大模型,抢占高薪风口,从入门到高薪 Offer 全攻略 35岁程序员面临职业瓶颈,大模型技术提供了转行出路。文章分析了为何转行大模型是明智之选,包括行业风口、需求缺口大、原有技术可复用、职业生命周…...
【数据结构】线索二叉树之中序遍历线索化详解与实现
在二叉树的遍历过程中,我们会发现大量的空指针域被浪费,而线索二叉树的核心思想就是利用这些空指针,将其指向节点的前驱或后继节点,从而实现二叉树的非递归遍历无需借助栈,提升遍历效率。本文将详细讲解中序遍历线索化…...
保姆级教程:用Ultralytics库把YOLOv11模型导出成ONNX/TensorRT格式(附参数详解)
保姆级教程:用Ultralytics库把YOLOv11模型导出成ONNX/TensorRT格式(附参数详解) 当你完成YOLOv11模型的训练后,下一步就是将其部署到实际应用中。模型导出是部署的关键环节,直接影响推理性能和硬件兼容性。本文将带你深…...
LLM性能评估入门到精通,搞懂推理指标看这篇就够了!
TTFT、TPOT、ITL、Goodput… 这些指标到底什么意思?今天用一篇文章彻底讲清楚 LLM 推理的性能评估体系。 一、为什么指标很重要 生产环境的真实场景 你部署了一个大模型服务,用户反馈: “首字响应好慢” → 什么问题?“生成过程…...
基于 HT for Web 的机车整备场数字孪生系统技术实现
本文基于 HT for Web(基于 WebGL/Canvas 的纯前端可视化插件)构建机车整备场数字孪生三维可视化系统,通过轻量化三维建模、实时数据对接、前端 API 驱动渲染,实现整备场全流程、全要素、全场景的数字化监管。该系统采用 B/S 架构&…...
LLM到Harness Engineering,我花一天时间捋清了这条技术链,终于搞懂了!
本文深入浅出地梳理了AI领域中的核心概念,从基础的大语言模型(LLM)、Token、Context、Prompt,到工具(Tool)、模型上下文协议(MCP),再到智能体(Agentÿ…...
Spring AI 助力 Java 开发者构建全功能 AI 智能体
【导语:随着人工智能的迅速发展,Java 开发者在将 AI 能力集成到基于 Spring 的应用程序方面选择有限。Spring AI 的出现改变了这一局面,本文详细介绍了如何使用 Spring AI 构建基于 Java 的全功能 AI 智能体。】Spring AI 打破 Java 集成 AI …...
KRaft VS RocketMQ NameServer
Kafka KRaft 和 RocketMQ NameServer 是两大消息队列用于元数据/路由管理的核心组件,但设计哲学完全不同:KRaft 是强一致的共识集群(CP),NameServer 是无状态的分布式路由表(AP)。下面从架构、原理、优缺点、选型做全面对比。 一、核心定位与本质区别 Kafka KRaft 定位…...
RexUniNLU部署教程:Kubernetes集群中水平扩缩容RexUniNLU服务的Helm Chart实践
RexUniNLU部署教程:Kubernetes集群中水平扩缩容RexUniNLU服务的Helm Chart实践 1. 为什么需要在K8s中部署RexUniNLU? 你可能已经试过在本地跑通 python test.py,也成功启动了 server.py 提供的 FastAPI 接口。但当真实业务流量进来——比如…...
【DIY小记】解决MacOS上Edge浏览器bilibili全屏卡顿的问题
近日笔者发现自己Macbook-Pro播放B站视频,全屏的时候必然卡顿,退出全屏就没事。笔者电脑的参数是: 芯片:M3系统:Tahoe 26.4浏览器:Edge 到网上一查发现《Edge浏览器在MacOS 26(Tahoe)系统上看B站卡顿》一…...
