hdfs namenode -format
格式化后会在hadoop.tmp.dir
目录产生fsiamge
文件
[zhangsan@node1 ~]$ cd /opt/bigdata/hadoop/default/dfs/name/current
[zhangsan@node1 current]$ ll
-rw-rw-r--. 1 zhangsan zhangsan 355 Apr 4 08:52 fsimage_0000000000000000000
-rw-rw-r--. 1 zhangsan zhangsan 62 Apr 4 08:52 fsimage_0000000000000000000.md5
-rw-rw-r--. 1 zhangsan zhangsan 2 Apr 4 08:52 seen_txid
-rw-rw-r--. 1 zhangsan zhangsan 207 Apr 4 08:52 VERSION
接下来我们使用工具查看每个文件的内容。
Offline Image Viewer(oiv)
是一个可以将hdfs
的fsimage
文件的内容转储为人类可读的格式的工具。支持多种Processor
解析方式:Web processor
, XML Processor
, Delimited Processor
, FileDistribution Processor
等。
bin/hdfs oiv -p XML -i fsimage -o fsimage.xml
-p
|--processor
processor
-i
|--inputFile
input file
-o
|--outputFile
output file
-h
| --help
[zhangsan@node1 current]$ hdfs oiv -i fsimage_0000000000000000000 -p XML -o ~/fsimage_0000000000000000000.xml
fsimage_0000000000000000000.xml
文件内容:
[zhangsan@node1 current]$ cat ~/fsimage_0000000000000000000.xml
1000
1000
0
1073741824
0
16385
16385
DIRECTORY
0
zhangsan:supergroup:rwxr-xr-x
9223372036854775807
-1
0
16385
0
0
1
[zhangsan@node1 current]$ hdfs oiv -i fsimage_0000000000000000000 -p FileDistribution -o ~/fsimage_0000000000000000000.fd
[zhangsan@node1 current]$ cat ~/fsimage_0000000000000000000.fd
Processed 0 inodes.
Size NumFiles
totalFiles = 0
totalDirectories = 1
totalBlocks = 0
totalSpace = 0
maxFileSize = 0
##### Delimited Processor
[zhangsan@node1 current]$ hdfs oiv -i fsimage_0000000000000000000 -p Delimited -o ~/fsimage_0000000000000000000.delimited
[zhangsan@node1 current]$ cat ~/fsimage_0000000000000000000.delimited
/ 0 1970-01-01 08:00 1970-01-01 08:00 0 0 0 9223372036854775807 -1 rwxr-xr-x zhangsan supergroup
```
### VERSION
```
[zhangsan@node1 current]$ cat VERSION
#Mon Apr 04 08:52:15 CST 2022
namespaceID=1551467440
clusterID=CID-18aaceee-980c-475a-8d3d-d59b7291541a
cTime=0
storageType=NAME_NODE
blockpoolID=BP-792177474-192.168.179.101-1649033535606
layoutVersion=-63
```
### seen\_txid
```
[zhangsan@node1 current]$ cat seen_txid
0
```
### edits
`edits`文件中记录了`HDFS`的操作日志,现在`HDFS`中没有任何文件,我们创建文件夹`/user/zhangsan`,在创建文件前,先启动`HDFS`。
![图片](https://img-blog.csdnimg.cn/img_convert/9e3eda1c243d3c070d372ba2080e2e4c.png)
`Offline Edits Viewer(oev)`是一个用来解析`Edits`日志文件的工具。支持多种`Processor`解析方式:`XML`, `stats`等。
#### 使用方法
`bin/hdfs oev -p xml -i edits -o edits.xml`
#### 使用案例
##### 创建文件夹`/user/zhangsan`
```
[zhangsan@node1 current]$ hdfs oev -i edits_inprogress_0000000000000000001 -p XML -o ~/edits_inprogress_0000000000000000001.xml
```
##### 查看edits
```
[zhangsan@node1 current]$ cat ~/edits_inprogress_0000000000000000001.xml
-63
OP_START_LOG_SEGMENT
1
OP_MKDIR
2
0
16386
/user
1649034484846
zhangsan
supergroup
493
OP_MKDIR
3
0
16387
/user/zhangsan
1649034484856
zhangsan
supergroup
493
```
##### 上传文件`hadoop-2.7.3.tar.gz`到`hdfs://node1:9000/user/hadoop/`
```
[zhangsan@node1 current]$ hdfs dfs -put /opt/bigdata/hadoop/hadoop-2.7.3.tar.gz /user/zhangsan
```
##### 再次查看edits
```
-63
OP_START_LOG_SEGMENT
1
OP_MKDIR
2
0
16386
/user
1649034484846
zhangsan
supergroup
493
OP_MKDIR
3
0
16387
/user/zhangsan
1649034484856
zhangsan
supergroup
493
OP_ADD
4
0
16388
/user/zhangsan/hadoop-2.7.3.tar.gz._COPYING_
3
1649035096135
1649035096135
134217728
DFSClient_NONMAPREDUCE_-297911069_1
192.168.179.101
true
zhangsan
supergroup
420
c2ab8d7c-26da-42c8-a479-121dc16a21aa
3
OP_ALLOCATE_BLOCK_ID
5
1073741825
OP_SET_GENSTAMP_V2
6
1001
OP_ADD_BLOCK
7
/user/zhangsan/hadoop-2.7.3.tar.gz._COPYING_
1073741825
0
1001
-2
OP_ALLOCATE_BLOCK_ID
8
1073741826
OP_SET_GENSTAMP_V2
9
1002
OP_ADD_BLOCK
10
/user/zhangsan/hadoop-2.7.3.tar.gz._COPYING_
1073741825
134217728
1001
1073741826
0
1002
-2
OP_CLOSE
11
0
0
/user/zhangsan/hadoop-2.7.3.tar.gz._COPYING_
3
1649035103318
1649035096135
134217728
false
1073741825
134217728
1001
1073741826
79874467
1002
zhangsan
supergroup
420
OP_RENAME_OLD
12
0
/user/zhangsan/hadoop-2.7.3.tar.gz._COPYING_
/user/zhangsan/hadoop-2.7.3.tar.gz
1649035103337
c2ab8d7c-26da-42c8-a479-121dc16a21aa
9
```
CheckPointing
-------------
检查点是一个获取 `fsimage` 和`edit log`并将它们压缩成新 `fsimage` 的过程。这样,`NameNode`可以直接从 `fsimage` 加载最终状态到内存中,而不是重加载大量的的`edit log`。这是一种效率更高的操作,并减少了 `NameNode` 的启动时间。
![图片](https://img-blog.csdnimg.cn/img_convert/45d01f48dc554fbe65d5a0ddf3b265c4.png)
创建新的 `fsimage` 是一项 I/O 和 CPU 密集型操作,有时需要几分钟才能执行。在检查点期间,`NameNode`还需要限制其他用户的并发访问。因此,`HDFS` 不是暂停活动的 `NameNode` 来执行检查点,而是将其推迟到 `SecondaryNameNode` 或备用 `NameNode`,具体取决于是否配置了 `NameNode` 高可用性(HA)。检查点的机制根据是否配置了 `NameNode` 高可用性而有所不同。