亦庄开发区建设局网站,网站建设越秀,卡密商城平台,首京建设投资引导基金网站文章目录 #xff08;59#xff09;NN和2NN的工作机制#xff08;60#xff09;FsImage镜像文件#xff08;61#xff09;Edits编辑日志#xff08;62#xff09;Checkpoint时间设置参考文献 #xff08;59#xff09;NN和2NN的工作机制
NameNode的数据是存储在磁盘… 文章目录 59NN和2NN的工作机制60FsImage镜像文件61Edits编辑日志62Checkpoint时间设置参考文献 59NN和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。
触发条件有两个
定时时间到默认时间是1hEdits文件中的数据满了一般是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这样的文件。
60FsImage镜像文件
NameNode被格式化之后会在/opt/module/hadoop-3.13/data/tmp/dfs/name/current目录中产生如下文件
fsimage_0000000000000000000
fsimage_0000000000000000000.md5
seen_txid
VERSIONfsimage是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上估计这种信息是维护在内存里的
61Edits编辑日志
查看Edits编辑日志文件
hdfs oev -p 文件类型 -o 转换后文件的输出路径打开文件会看到Edits是由一个一个组成的每次增删改操作都会在文件后追加生成一个。
那么在合并Edits的时候应该合并哪个或者哪些Edits呢
如果当前的fsImage后缀到了355那么就合并Edits后缀大于355的如356357等。
因为fsImage后缀到了355之后就证明Edits的355及之前的已经合并完了没啥用了。
62Checkpoint时间设置
是指2NN多久时间会联系NN去合并镜像文件和编辑日志。
之前说过2NN在触发指定条件后就会去NN那儿合并文件触发条件有两个
定时时间到默认时间是1hEdits文件中的数据满了一般是1百万条防止数据过多合并时效率会慢
关于定时时间默认是3600s即1H关于默认情况的时间设置是在hdfs-default.xml中搜索dfs.namenode.checkpoint.periodvalue就是checkpoint的时间。
如果Edits里面的操作数满了也会触发合并。这个默认的操作数是一百万次且每隔1min检查一次。
同样的也是在hdfs-default.xml中搜索设置。
propertynamedfs.namenode.checkpoint.txns/namevalue1000000/value
description操作动作次数/description
/propertypropertynamedfs.namenode.checkpoint.check.period/namevalue60s/value
description 1分钟检查一次操作次数/description
/property注意在企业生产中我们一般也用不上这些参数因为正常情况下企业会搭建NameNode的高可用所以就用不到2NN。
参考文献
【尚硅谷大数据Hadoop教程hadoop3.x搭建到集群调优百万播放】