1. Namenode会序列化文件的属性、文件块id、大小的元信息到磁盘,
并不会序列化文件块的具体位置信息到磁盘,文件块具体存放位置在集群
启动时Datanode进程汇报给Namenode,这个过程中进群处于安全模式
状态,对外不提供写操作,如下为fsImage文件片段信息:
<?xml version="1.0"?>
<fsimage>
<inode>
<id>16387</id>
<!--以下是文件的属性相关信息-->
<type>FILE</type>
<name>source.zip</name>
<replication>1</replication>
<mtime>1585630920747</mtime>
<atime>1585630919218</atime>
<preferredBlockSize>134217728</preferredBlockSize>
<permission>root:supergroup:0644</permission>
<!--以下是文件的block个数相关信息-->
<blocks>
<block>
<id>1073741825</id>
<genstamp>1001</genstamp>
<numBytes>134217728</numBytes>
</block>
<block>
<id>1073741826</id>
<genstamp>1002</genstamp>
<numBytes>58982940</numBytes>
</block>
</blocks>
<storagePolicyId>0</storagePolicyId>
</inode>
</fsimage>
[root@bigdata131:~/tools]
Connecting to namenode via http://bigdata131:50070/fsck?ugi=root&files=1&blocks=1&locations=1&racks=1&path=%2Finput%2Fsource.zip
FSCK started by root (auth:SIMPLE) from /192.168.137.131 for path /input/source.zip at Tue Mar 31 13:20:54 CST 2020
/input/source.zip 193200668 bytes, 2 block(s): OK
0. BP-525204384-192.168.137.131-1585630158186:blk_1073741825_1001 len=134217728 Live_repl=1 [/default-rack/192.168.137.131:50010]
1. BP-525204384-192.168.137.131-1585630158186:blk_1073741826_1002 len=58982940 Live_repl=1 [/default-rack/192.168.137.131:50010]
通过命令我们可以获取到block具体存放的节点信息:
blk_1073741825_1001 /default-rack/192.168.137.131
blk_1073741826_1002 /default-rack/192.168.137.131
这说明这部分的元信息是由Datanode汇报给Namenode并且常驻内存中的,
这么做是因为分布式环境下,Namenode无法确认任何一台Datanode在某
一时刻是否是活着的,为了保证数据的一致性以及对外服务的正确性,
所以Hadoop并没有将这部分元信息序列化到磁盘中