Fsimage中没有记录块所对应DataNode,为什么?

通过ovi查看fsimage并格式化。部分显示结果如下。

	16386
	DIRECTORY
	user
	1512722284477
	ch:supergroup:rwxr-xr-x
	-1
	-1


	16387
	DIRECTORY
	ch
	1512790549080
	ch:supergroup:rwxr-xr-x
	-1
	-1


	16389
	FILE
	wc.input
	3
	1512722322219
	1512722321610
	134217728
	ch:supergroup:rw-r--r--
	
		
			1073741825
			1001
			59
		
	

从以上fsimage中加载如namenode内存中的信息中可以很明显的看出,在fsimage中,并没有记录每一个block对应到哪几个datanodes的对应表信息,而只是存储了所有的关于namespace的相关信息。而真正每个block对应到datanodes列表的信息在hadoop中并没有进行持久化存储,而是在所有datanode启动时,每个datanode对本地磁盘进行扫描,将本datanode上保存的block信息汇报给namenode,namenode在接收到每个datanode的块信息汇报后,将接收到的块信息,以及其所在的datanode信息等保存在内存中。(HDFS就是通过这种块信息汇报的方式来完成 block -> datanodes list的对应表构建。Datanode向namenode汇报块信息的过程叫做blockReport,而namenode将block -> datanodes list的对应表信息保存在一个叫BlocksMap的数据结构中。)

你可能感兴趣的:(hadoop)