李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
05.HDFS之NameNode和SecondaryNameNode
Leefs
2021-09-17 PM
2342℃
0条
[TOC] ### 一、NameNode元数据存储位置 首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。**因此产生在磁盘中备份元数据的FsImage**。 这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。**因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。**这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。 但是,如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。**因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits的合并。** ### 二、NameNode工作机制  #### 第一阶段:NameNode启动 (1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。 (2)客户端对元数据进行增删改的请求。 (3)NameNode记录操作日志,更新滚动日志。 (4)NameNode在内存中对元数据进行增删改。 #### 第二阶段:Secondary NameNode工作 (1)Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。 (2)Secondary NameNode请求执行CheckPoint。 (3)NameNode滚动正在写的Edits日志。 (4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。 (5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。 (6)生成新的镜像文件fsimage.chkpoint。 (7)拷贝fsimage.chkpoint到NameNode。 (8)NameNode将fsimage.chkpoint重新命名成fsimage。 ### 三、Fsimage和Edits解析 #### 3.1 概念 NameNode被格式化之后,将在`/opt/module/hadoop-3.1.3/data/tmp/dfs/name/current`目录中产生如下文件 ```xml fsimage_0000000000000000000 fsimage_0000000000000000000.md5 seen_txid VERSION ``` (1)Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目 录和文件inode的序列化信息。 (2)Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先 会被记录到Edits文件中。 (3)seen_txid文件保存的是一个数字,就是最后一个edits_的数字 (4)每次NameNode启动的时候都会将Fsimage文件读入内存,加 载Edits里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成NameNode启动的时候就将Fsimage和Edits文件进行了合并。 #### 3.2 实操 ##### 1、oiv查看Fsimage文件 (1)查看oiv和oev命令 ```shell [root@hadoop102 current]# hdfs oiv apply the offline fsimage viewer to an fsimage oev apply the offline edits viewer to an edits file ``` (2)基本语法 > hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径 ```shell [root@hadoop102 current]# hdfs oiv -p XML -i fsimage_0000000000000000025 -o /opt/module/hadoop-3.1.3/fsimage.xml ``` (4)查询`fsimage.xml`文件配置 ```shell [root@hadoop102 current]# cat /opt/module/hadoop-3.1.3/fsimage.xml ``` **结果展示** ```xml
16386
DIRECTORY
user
1512722284477
atguigu:supergroup:rwxr-xr-x
-1
-1
16387
DIRECTORY
atguigu
1512790549080
atguigu:supergroup:rwxr-xr-x
-1
-1
16389
FILE
wc.input
3
1512722322219
1512722321610
134217728
atguigu:supergroup:rw-r--r--
1073741825
1001
59
``` 在集群启动后,要求 DataNode上报数据块信息,并间隔一段时间后再次上报。 ##### 2、oev查看Edits文件 (1)基本语法 > hdfs oev -p 文件类型 -i 编辑日志 -o 转换后文件输出路径 ```xml [root@hadoop102 current]# hdfs oev -p XML -i edits_0000000000000000012-0000000000000000013 -o /opt/module/hadoop-3.1.3/edits.xml ``` (2)查看`edits.xml`配置文件 ```shell [root@hadoop102 current]# cat /opt/module/hadoop-3.1.3/edits.xml ``` **展示结果** ```xml
-63
OP_START_LOG_SEGMENT
129
OP_ADD
130
0
16407
/hello7.txt
2
1512943607866
1512943607866
134217728
DFSClient_NONMAPREDUCE_- 1544295051_1
192.168.10.102
true
atguigu
supergroup
420
908eafd4-9aec-4288-96f1- e8011d181561
0
OP_ALLOCATE_BLOCK_ID
131
1073741839
OP_SET_GENSTAMP_V2
132
1016
OP_ADD_BLOCK
133
/hello7.txt
1073741839
0
1016
-2
OP_CLOSE
134
0
0
/hello7.txt
2
1512943608761
1512943607866
134217728
false
1073741839
25
1016
atguigu
supergroup
420
``` ### 四、CheckPoint时间设置 (1)通常情况下,SecondaryNameNode 每隔一小时执行一次。 配置文件`hdfs-default.xml` ```xml
dfs.namenode.checkpoint.period
3600s
``` (2)一分钟检查一次操作次数,当操作次数达到 1 百万时,SecondaryNameNode 执行一次。 ```xml
dfs.namenode.checkpoint.txns
1000000
操作动作次数
dfs.namenode.checkpoint.check.period
60s
1 分钟检查一次操作次数
``` *附:* *文章来源《尚硅谷大数据之Hadoop》*
标签:
Hadoop
,
HDFS
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1495.html
上一篇
04.HDFS之API操作
下一篇
06.HDFS之DataNode介绍
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
35
其它
25
GO
48
NLP
8
标签云
Docker
GET和POST
Spark SQL
工具
Elasticsearch
Jquery
Elastisearch
前端
SpringBoot
Java编程思想
查找
nginx
Netty
Git
FastDFS
Kubernetes
Redis
Filter
机器学习
栈
随笔
序列化和反序列化
gorm
排序
Spark RDD
Python
Azkaban
Yarn
并发线程
SQL练习题
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞