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 内联函数与宏对…...
Nintendo Switch游戏备份终极指南:用nxdumptool轻松提取你的游戏收藏
Nintendo Switch游戏备份终极指南:用nxdumptool轻松提取你的游戏收藏 【免费下载链接】nxdumptool Generates XCI/NSP/HFS0/ExeFS/RomFS/Certificate/Ticket dumps from Nintendo Switch gamecards and installed SD/eMMC titles. 项目地址: https://gitcode.com/…...
magic-api Swagger文档自动生成:让API文档维护变得简单
magic-api Swagger文档自动生成:让API文档维护变得简单 【免费下载链接】magic-api magic-api 是一个接口快速开发框架,通过Web页面编写脚本以及配置,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Jav…...
Hotkey Detective:重塑Windows键盘操作的透明化洞察
Hotkey Detective:重塑Windows键盘操作的透明化洞察 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾在…...
【免费下载】 符合标准(GB、JB)的SolidWorks模板
符合标准(GB、JB)的SolidWorks模板 【下载地址】符合标准GBJB的SolidWorks模板 本仓库提供了一系列符合国家标准(GB)和机械行业标准(JB)的SolidWorks模板文件,适用于各种工程设计和绘图需求。这些模板涵盖了不同尺寸的…...
从数学常数到编程实战:用C++三种方法手把手教你计算自然常数e(附OpenJudge NOI 1.5 35题解)
从数学常数到编程实战:用C三种方法手把手教你计算自然常数e 自然常数e是数学中最重要的常数之一,广泛应用于微积分、概率统计和复利计算等领域。对于编程学习者来说,理解e的计算原理并实现其算法,不仅能加深对数学概念的理解&…...
别再被Windows权限卡脖子!用`--user`参数搞定pip安装报错(附详细排查步骤)
彻底解决Windows下Python包安装权限问题:从--user参数到环境配置全攻略 在Windows系统上进行Python开发时,许多开发者都曾遭遇过这样的尴尬时刻:当你满怀期待地输入pip install package_name准备安装一个新工具时,屏幕上却突然跳出…...
RISC-V开发板深度测评指南:从硬件解析到生态实战
1. 项目概述:一次深度参与RISC-V生态的实战机会最近,电子发烧友社区联合多家厂商发起的第二届RISC-V开发板测评大赛,吸引了圈内不少工程师和爱好者的目光。其中,昊芯(Haawking)作为一家专注于RISC-V处理器I…...
如何为FF14国际服实现完整中文汉化:FFXIVChnTextPatch实战指南
如何为FF14国际服实现完整中文汉化:FFXIVChnTextPatch实战指南 【免费下载链接】FFXIVChnTextPatch 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIVChnTextPatch 还在为《最终幻想14》国际服的英文界面而烦恼吗?FFXIVChnTextPatch项目为你提…...
犀牛开发者日记-犀牛论剑特辑 | 李江浩:一个 ROS 布道师的转身
熟悉ROS领域的朋友,对李江浩这个名字想必并不陌生。作为资深ROS布道师,他常年活跃在技术社区分享干货,面对同行提出的各类问题,总能给出快准狠的解决方案,精准直击技术痛点。熟悉他的人都有一个共同感受:李…...
从硬件电路深入理解计算机中断机制:8088到现代中断控制器
1. 项目概述:从硬件视角重新认识中断在计算机的世界里,中断(Interrupt)是一个既基础又至关重要的概念。它就像是程序世界里的“紧急呼叫”系统,允许CPU这个“大管家”在埋头处理日常事务(执行主程序&#x…...
