一、NameNode、Fsimage 、Edits 和 SecondaryNameNode 概述
NameNode:在内存中储存 HDFS 文件的元数据信息(目录)
如果节点故障或断电,存在内存中的数据会丢失,显然只在内存中保存是不可靠的
实际在磁盘当中也有保存:Fsimage 和 Edits,一个 NameNode 节点在重启后会根据这磁盘上的这两个文件来恢复到之前的状态
Fsimage(镜像文件) 和 Edits(编辑日志):记录内存中的元数据
如果每次对 HDFS 的操作都实时的把内存中的元数据信息往磁盘上传输,这样显然效率不够高,也不稳定
这时就出现了 Edits 文件,用来记录每次对 HDFS 的操作,这样在磁盘上每次就只用做很小改动(只进行追加操作)
当 Edits 文件达到了一定大小或过了一定的时间,就需要把 Edits 文件转化 Fsimage 文件,然后清空 Edits
这样的 Fsimage 文件不会和内存中的元数据实时同步,需要加上 Edits 文件才相等
SecondaryNameNode:负责 Edits 转化成 Fsimage
SecondaryNameNode 不是 NameNode 的备份
SecondaryNameNode 会定时定量的把集群中的 Edits 文件转化为 Fsimage 文件,来保证 NameNode 中数据的可靠性
二、NameNode 工作机制
磁盘上的元数据文件
三、查看 Edits 与 Fsimage
Edits 和 Fsimage 并非明文存储,需要转换后才能查看,使用 hdfs 命令进行转换
# 部分命令参数
Usage: hdfs [--config confdir] [--loglevel loglevel] COMMAND
where COMMAND is one of:
转换 fsimage 文件
oiv apply the offline fsimage viewer to an fsimage
转换旧版 fsimage 文件
oiv_legacy apply the offline fsimage viewer to an legacy fsimage
转换 edits 文件
oev apply the offline edits viewer to an edits file
hdfs oiv:查看参数
部分参数说明
Usage: bin/hdfs oiv [OPTIONS] -i INPUTFILE -o OUTPUTFILE
-i 要转换的文件
-o 转换后文件路径
-p 转换格式 (XML|FileDistribution|ReverseXML|Web|Delimited)
转换文件
hdfs oiv -p XML -i ./fsimage_0000000000000000326 -o ./fsimage.xml
转换后的文件,记录了文件信息
-63
1
Unknown
1803101069
1000
1015
0
1073741839
326
16400
11
16385
DIRECTORY
1555218314075
root:supergroup:0755
9223372036854775807
-1
16388
FILE
javafx-src.zip
2
1554996304962
15550 84059617
134217728
root:supergroup:0644
107 3741829
1005
5211154
0
16389
DIRECTORY
0529
1554999968472
root:supergroup:0755
-1
-1
16390
DIRECTORY
mkmk
1555000275046
root:supergroup:0755
-1
-1
16391
DIRECTORY
10088
1555000763405
root:supergroup:0755
-1
-1
16394
FILE
Writage-1.12.msi
3
1555086090236
155 5086085824
134217728
root:supergroup:0644
1 073741832
1008
12771328
0
16395
FILE
hadoop-2.9.2-win10-64.tar.gz
3
1555086717860
1555086612935
134217728
root:supergroup:0644
1073741833
1009
134217728
1073741834
1010
134217728
1073741835
1011
43080138
0
16396
DIRECTORY
Priority
1555219450567
root:supergroup:0755
-1
-1
16398
FILE
AAA.msi
3
1555219070073
155521906501 6
134217728
root:supergroup:0644
1073741837
1013
12771328
0
16399
FILE
BBB.msi
1
1555219285187
155521928012 9
134217728
root:supergroup:0644
1073741838
1014
12771328
0
16400
FILE
CCC.msi
2
1555219455139
155521945056 7
134217728
root:supergroup:0644
1073741839
1015
12771328
0
0
0
16385
16389
16391
16396
16394
16395
16388
16390
16396
16398
16399
16400
0
0
0
0
1
0
0
hdfs oev:查看参数
参数与上面类似,-p 有些不同
-p binary (native binary format that Hadoop uses), xml (default, XML format), stats (prints statistics about edits file)
转换文件
hdfs oev -p xml -i ./edits_inprogress_0000000000000000329 -o ./edits.xml
转换后的文件,记录 hdfs 的操作记录
-63
OP_START_LOG_SEGMENT
16
OP_ADD
17
0
16386
/javafx-src.zip._COPYING_
3
1554995796290
1554995796290
134217728
DFSClient_NONMAPREDUCE_1941526907_1
192.168.8.136
true
root
supergroup
420
5b80319d-463f-4591-b090-2d1462563e48
3
OP_ALLOCATE_BLOCK_ID
18
1073741825
OP_SET_GENSTAMP_V2
19
1001
OP_ADD_BLOCK
20
/javafx-src.zip._COPYING_
1073741825
0
1001
-2
OP_UPDATE_BLOCKS
21
/javafx-src.zip._COPYING_
-2
OP_ALLOCATE_BLOCK_ID
22
1073741826
OP_SET_GENSTAMP_V2
23
1002
OP_ADD_BLOCK
24
/javafx-src.zip._COPYING_
1073741826
0
1002
-2
OP_CLOSE
25
0
0
/javafx-src.zip._COPYING_
3
1554995797095
1554995796290
134217728
false
1073741826
5211154
1002
root
supergroup
420
OP_RENAME_OLD
26
0
/javafx-src.zip._COPYING_
/javafx-src.zip
1554995797102
5b80319d-463f-4591-b090-2d1462563e48
11
OP_DELETE
27
0
/javafx-src.zip
1554995877570
847eb009-9524-4f1c-a5a5-5253908ec1b5
3
四、CheckPoint 时间设置
1.以时间为准
dfs.namenode.checkpoint.period
3600
SecondaryNameNode 默认每隔一小时执行一次
查看默认配置:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
2.以次数为准
dfs.namenode.checkpoint.txns
10000
作次数到达一万次就发起合并
dfs.namenode.checkpoint.check.period
600
每间隔10分钟检查一次操作次数是否到达
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsEditsViewer.html
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsImageViewer.html
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html#Secondary_NameNode