Hadoop3教程(五):NameNode和SecondaryNameNode
文章目录
- (59)NN和2NN的工作机制
- (60)FsImage镜像文件
- (61)Edits编辑日志
- (62)Checkpoint时间设置
- 参考文献
(59)NN和2NN的工作机制
NameNode的数据是存储在磁盘中,还是在内存中?
内存:计算快,但可靠差,节点崩了就全丢了;
磁盘:可靠性高,但是计算慢(因为需要频繁的IO交互);
内存+磁盘:内存计算完后就持久化到磁盘,可靠性提高了,计算也相对较快了,但其实相比全内存,还是会慢一些(毕竟还是有频繁IO交互);
目前NN的机制是,内存中维护一套数据,然后磁盘上维护两个文件,fsImage负责存储数据的值,Edits负责记录对数据的操作记录,且fsImage + Edits = 内存中的数据。
fsImage:存储数据
Edits:只记录追加,不修改原始地址,类似日志,只记录操作;
服务器启动的时候,就会将fsImage + Edits 的数据加载到内存。
服务器关闭的时候,就把Edits的数据加载到fsImage中(保证fsImage中是最完全的)。
但只在关闭的时候做刷新,也不行,太危险,而且会导致关机时间变长,因此最好的方式是每隔一段时间,就用Edits去刷一下fsImage中的值,这部分就是2NN负责的(定期进行合并)。
这两个文件在集群的data/dfs/name/current/
下。
NameNode的完整流程如图:
对NameNode来讲,主要是执行以下几步:
- 开机,加载fsImage镜像文件和Edits编辑文件进内存(如果NameNode是第一次启动,则是新建这两个文件);
- client发送增删改请求;
- Edits编辑文件,负责记录数据的增删改日志,然后再发送请求,修改内存中的对应值
- 内存开始对应的增删改;
2NN工作流程:
2NN会周期性被触发,去问NN是否需要合并数据做checkpoint。
触发条件有两个:
- 定时时间到(默认时间是1h);
- Edits文件中的数据满了(一般是1百万条,防止数据过多,合并时效率会慢);
2NN在请求执行checkpoint操作时:
- 滚动正在写的Edits。如果当前在写的Edits文件叫做
edits_inprogress_001
,那么NN会将其命名为edits_001
,同时新建edits_inprogress_002
,之后client过来的增删改请求,会由新的edits_inprogress_002
来记录; - 将上一步中的
edits_001
和fsIamge
镜像文件复制到2NN,两者合并加载到内存。 - 上一步后,会在2NN中生成一个新的fsImage,被命名为
fsImage.chkpoint
; - 把得到的
fsImage.chkpoint
文件拷贝回NN目录下,并重命名,覆盖原先的fsImage。
因此,2NN和NN之间的文件差异,就在于NN会有一个edits_inprogress_xxx
的文件,而2NN中只有edits_xxx
这样的文件。
(60)FsImage镜像文件
NameNode被格式化之后,会在/opt/module/hadoop-3.13/data/tmp/dfs/name/current
目录中产生如下文件:
fsimage_0000000000000000000
fsimage_0000000000000000000.md5
seen_txid
VERSION
- fsimage:是HDFS文件系统元数据的一个永久性的检查点,包含HDFS文件系统的所有目录和iNode的序列化信息等;
- Edits:存放HDFS文件系统的所有增删改操作。所有写操作会首先被记录在Edits文件里,而不是先直接操作内存;
- seen_txid:保存的是一个数字,代表最新fsimage文件后缀的数字;
- VERSION:保存集群ID等信息;
如何查看FsImage镜像文件里的内容呢?
常规方式不可以,可以通过HDFS指令来把镜像文件转成常规格式的文件,以此来查看:
hdfs oiv -p 文件类型 -i 镜像文件地址 -o 转换后文件的输出路径
如:
hdfs oiv -p XML -i /opt/module/hadoop-3.13/data/tmp/dfs/name/current/fsimage_0000000000000000234 -o /opt/software/fsimage.xml
就是把指定的fsImage文件,输出成常规的xml文件,然后cat输出的xml文件就可以查看内容。
fsImage文件里都放了什么内容?
如HDFS的目录结构,在HDFS中,无论是文件还是目录,都被视为是一个inode节点。通过每个iNode的parent和child的依赖关系,镜像文件里以树形结构维护着整个HDFS的目录结构等信息。
NameNode里面如何记录块信息呢?
事实上,NameNode里并不会主动记录,哪个文件块存储在哪个DataNode上,而是每次通电后,DataNode们会主动向NameNode汇报,我这里存了哪些文件块。
所以FsImage镜像文件里,只会记录HDFS的目录信息,而不会记录文件块存储在哪些DataNode上,估计这种信息是维护在内存里的?
(61)Edits编辑日志
查看Edits编辑日志文件:
hdfs oev -p 文件类型 -o 转换后文件的输出路径
打开文件会看到,Edits是由一个一个组成的,每次增删改操作都会在文件后追加生成一个。
那么在合并Edits的时候,应该合并哪个或者哪些Edits呢?
如果当前的fsImage后缀到了355,那么就合并Edits后缀大于355的,如356,357等。
因为fsImage后缀到了355之后,就证明Edits的355及之前的已经合并完了,没啥用了。
(62)Checkpoint时间设置
是指2NN多久时间,会联系NN去合并镜像文件和编辑日志。
之前说过,2NN在触发指定条件后,就会去NN那儿合并文件,触发条件有两个:
- 定时时间到(默认时间是1h);
- Edits文件中的数据满了(一般是1百万条,防止数据过多,合并时效率会慢);
关于定时时间,默认是3600s,即1H,关于默认情况的时间设置是在hdfs-default.xml中,搜索dfs.namenode.checkpoint.period
,value就是checkpoint的时间。
如果Edits里面的操作数满了,也会触发合并。这个默认的操作数是一百万次,且每隔1min检查一次。
同样的,也是在hdfs-default.xml中搜索设置。
<property><name>dfs.namenode.checkpoint.txns</name><value>1000000</value>
<description>操作动作次数</description>
</property><property><name>dfs.namenode.checkpoint.check.period</name><value>60s</value>
<description> 1分钟检查一次操作次数</description>
</property>
注意:在企业生产中,我们一般也用不上这些参数,因为正常情况下,企业会搭建NameNode的高可用,所以就用不到2NN。
参考文献
- 【尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放】
相关文章:

Hadoop3教程(五):NameNode和SecondaryNameNode
文章目录 (59)NN和2NN的工作机制(60)FsImage镜像文件(61)Edits编辑日志(62)Checkpoint时间设置参考文献 (59)NN和2NN的工作机制 NameNode的数据是存储在磁盘…...

腾讯云我的世界mc服务器多少钱一年?
腾讯云我的世界mc服务器多少钱?95元一年2核2G3M轻量应用服务器、2核4G5M带宽优惠价218元一年、4核8G12M带宽轻量服务器446元一年,云服务器CVM标准型S5实例2核2G优惠价280元一年、2核4G配置服务器748元一年,腾讯云百科txybk.com分享腾讯云我的…...
modelsim实现二选一以及D触发器并仿真
#实验一 二选一 module two_1(in1,in2,cho,out); input[3:0] in1,in2; output[3:0] out; reg[3:0] out; input cho; always* begin if(cho0) outin1; else outin2; end endmodule module two1_test(); …...

直线导轨在喷涂行业中的应用场景
直线导轨因其具有精度高、速度快、刚性强、使用寿命长等特点被广泛应用在各行各种中,其中,在喷涂行业中的应用最为广泛,以下是直线导轨在喷涂行业中的应用场景: 1、平面喷涂:直线导轨可以应用在各种机械加工的平面&…...
纯css+js自制下拉框
前提 因为html的select标签,下拉框自定义程度非常的低,为了贴合而项目ui显示,所以打算自制下拉框 代码 html <div class"pos-rel"><div id"select" class"select get-select"><span class&…...
uniapp在App端如何动态修改原生导航栏?
uniapp在App端如何动态修改原生导航栏? 文章目录 uniapp在App端如何动态修改原生导航栏?page.json配置修改 buttons 文字修改按钮上的角标设置 searchInput的 focus设置 searchInput的 text 在App端可以通过得到 webview 对象,通过当前 webvi…...
Linux:CPUPower管理器 --- cpufreq解析
一、cpufreq是什么? cpufreq是Linux内核下的一种功率管理框架,它负责改变CPU的频率,以降低功耗并延长电池寿命。该框架的主要机制是动态调整CPU频率,该频率受限于CPU的负载和功耗。cpufreq能够动态地将频率降低到最低值或最高值&a…...

【嵌入式开发问答】不是普通的嵌入式八股
1. 进程、线程、堆栈、溢出 【问:】 进程的堆栈的物理内存是什么时候分配的? 堆栈的大小限制是多大?这个限制可以调整吗? 当堆栈发生溢出后应用程序会发生什么? 【答:】...
面试题-springboot篇-SpringBoot的注解
SpringBootApplication是SpringBoot的最核心的注解。 SpringBootApplication注解在SpringBoot的主类上,标识是SpringBoot应用,用来开启SpringBoot的各项能力。由SpringBootConfiguration、EnableAutoConfiguration、ComponentScan三个注解组成。这三个注…...

BaiChuan2保姆级微调范例
前方干货预警:这可能是你能够找到的,最容易理解,最容易跑通的,适用于各种开源LLM模型的,同时支持多轮和单轮对话数据集的大模型高效微调范例。 我们构造了一个修改大模型自我认知的3轮对话的玩具数据集,使用…...
postgresql参数优化
一 相关参数介绍 1.1 内存参数-shared_buffers shared_buffers:共享缓存区的大小,相当于oracle数据库中的SGA. 一般推荐为内存的四分之一,不超过总内存的二分之一。 该值默认是128M。 1.2 cpu并行参数-max_parallel_workers max_parall…...

【极速发表】2-4区SCI (含CCF),平均录用周期仅2个月,最快11天见刊!
一、计算机科学类SCI (11.30截稿) 【期刊概况】IF:4.0-5.0, JCR2区,中科院3区; 【检索情况】SCI在检,正刊; 【国人占比】10.58%; 【自引率】7.50%; 【年发文量】100篇以下; 【预警情况】无…...

Git 提交规范
遇到的问题 在项目中采用 git 管理代码版本时,突然不能进行提交(git commit)。 报错信息如下: ERROR invalid commit message format. Proper commit message format is required for automated changelog generation. Git 规范…...
[Python进阶] 操纵鼠标:PyAutoGUI
6.4 操纵鼠标:PyAutoGUI 6.4.1 说明 PyAutoGUI是一个Python的GUI自动化工具,它可以让程序自动控制鼠标和键盘的一系列操作。它能够模拟鼠标的移动、点击、拖拽等操作,以及键盘的按键按下和释放等操作。PyAutoGUI还提供了其他功能࿰…...
JavaScript querySelector
querySelector方法的语法: var element document.getElementById("id"); element.querySelector(selector)element是要执行选择操作的父元素,selector是CSS选择器,用于指定要选择的元素。 querySelector方法返回匹配选择器的第一…...

Selenium自动化测试
一、Selenium自动化测试(基于python) 1、Selenium简介: 1.1 Selenium是一款主要用于Web应用程序自动化测试的工具集合。Selenium测试直接运行在浏览器中,本质是通过驱动浏览器,模拟浏览器的操作,比如跳转…...

Lua调用C#类
先创建一个Main脚本作为主入口,挂载到摄像机上 public class Main : MonoBehaviour {// Start is called before the first frame updatevoid Start(){LuaMgr.GetInstance().Init();LuaMgr.GetInstance().DoLuaFile("Main");}// Update is called once p…...
“react“: “^16.14.0“,打开弹窗数据发生变化
“react”: “^16.14.0”, 弹窗 打开弹窗数据发生变化 // 这里对比changeHistoryVisible是否发生改变调用后端方法改变数据componentDidUpdate(prevProps) {if (prevProps.changeHistoryVisible ! this.props.changeHistoryVisible && this.props.changeHistoryVisi…...

MySQL数据库varchar字段求和出现精度丢失
问题描述 在MySQL数据库中,将varchar字段用于数值运算时,会将其转换为数值类型进行计算。然而,由于varchar字段的可变长度特性,可能存在数值精度丢失的问题。 我用varchar类型存储学生的分数,分数有两位小数ÿ…...

C++入门 第二篇( 引用、内联函数、auto关键字、指针空值nullptr)
目录 6. 引用 6.1 引用概念 6.2 引用特性 6.3 常引用 正确用法:权限 缩小/平移 6.4 使用场景 1. 做参数 2. 做返回值 3.传值、传引用效率比较 6.5引用问题举例 6.6 反汇编中的& 6.7 引用和指针的不同点: 7.内联函数 7.1 内联函数与宏对…...

设备驱动与文件系统:05 文件使用磁盘的实现
从文件使用磁盘的实现逻辑分享 我们现在讲第30讲,内容是文件使用磁盘的具体实现,也就是相关代码是如何编写的。上一节我们探讨了如何从字符流位置算出盘块号,这是文件操作磁盘的核心。而这节课,我们将深入研究实现这一核心功能的…...
用 DeepSeek 高效完成数据分析与挖掘
一、DeepSeek 是什么? DeepSeek 是由深度求索推出的智能助手(当前版本 DeepSeek-R1),具备强大的自然语言理解、代码生成与数据分析能力。它支持 128K超长上下文,可处理复杂数据文档,并直接生成可运行的 Python 数据分析代码,是数据工作者的“AI副驾驶”。 二、DeepSeek…...
kubernetes jenkins pipeline优化拉取大仓库性能指定分支+深度
有时候我们历史的git仓库,提交了某个比较大的文件如果不限制 depth ,就会拉取所有的历史提交记录,这样在历史仓库比较大的时候 clone 非常之慢,而实际上我们只需要最新的代码来构建就行了,为了优化性能,我们…...

【Linux】文件赋权(指定文件所有者、所属组)、挂载光驱(图文教程)
文章目录 文件赋权创建文件 testChmod查看文件的当前权限使用 chmod 命令修改权限验证权限关键命令总结答案汇总 光驱挂载确认文件是否存在打包压缩压缩验证创建 work 目录将压缩文件复制到 work 目录新建挂载点 /MNT/CDROM 并挂载光驱答案汇总 更多相关内容可查看 此篇用以解决…...

Java核心技术-卷I-读书笔记(第十二版)
第一章 Java程序设计概述 09年sun被oracle收购->11年java7(简单改进)->14年java8(函数式编程)->2017年java9->2018年java11->2021年java17 第二章 Java编程环境 Java9后新增JShell,提供类似脚本试执…...
0x-4-Oracle 23 ai-sqlcl 25.1.1 独立安装-配置和优化
一、独立安装sqlcl 1. 安装 Java 环境 SQLcl 需要 Java 1.8.0_220 或更高版本, Oracle Linux9.6 上已经默认安装Oracle 23ai后Java 是11 lts版本 如果java jdk安装错误将遇上SQLcl困扰n多人的bug sql /nolog 错误:找不到或加载主类 oracle.dbto…...

MS39531N 是一款正弦驱动的三相无感直流电机驱动器,具有最小振动和高效率的特点
MS39531N 是一款正弦驱动的三相无感直流电机驱动器,具有最小振动和高效率的特点 简述 MS39531 是一款正弦驱动的 三相无感直流电机驱动器 ,具有最小振动和高效率的特点。该驱动器内部集成了基本的闭环速度控制功能,能够根据特定的应用定制电…...
Go 中 map 的双值检测写法详解
Go 中 map 的双值检测写法详解 在 Go 中,if char, exists : pairs[s[i]]; exists { 是一种利用 Go 语言特性编写的优雅条件语句,用于检测 map 中是否存在某个键。让我们分解解释这种写法: 语法结构解析 if value, ok : mapVariable[key]; …...

前端文件下载常用方式详解
在前端开发中,实现文件下载是常见的需求。根据不同的场景,我们可以选择不同的方法来实现文件流的下载。本文介绍三种常用的文件下载方式: 使用 axios 发送 JSON 请求下载文件流使用 axios 发送 FormData 请求下载文件流使用原生 form 表单提…...

基于Halcon深度学习之分类
***** ***环境准备*** ***系统:win7以上系统 ***显卡:算力3.0以上 ***显卡驱动:10.1以上版本(nvidia-smi查看指令)***读取深度学习模型*** read_dl_model (pretrained_dl_classifier_compact.hdl, DLModelHandle) ***获…...