首先在Datanode中,每一个block都对应一个数据存储文件,数据存储文件以_blk开头;同时,每一个block还对应一个元数据文件,元数据文件以.meta结尾(注意:meta file的命名格式如下blokcFileName_generationStamp.meta)。
首先将一下我理解的几个概念。在HDFS中有storage的概念,每一个节点对应一个storage。我们可以理解为一个Datanode是一个storage,一个Namenode也是一个storage。一个storage可以对应于多个存储目录(按照我的理解,不同的存储目录应该是对应于不同的硬盘或者存储装置)。在Datanode中代表实际数据存储的是FSDataset。FSDataset由多个FSVolume组成。每一个FSVolume对应于storage中一个存储目录(相当于一个FSVolume对应于一个硬盘)。最终,由FSVolume进行数据的存储。每个FSVolume包含了几个文件夹,包括dataDir(用来保存blocks和meta file)、tmpDir(临时文件夹)、detachDir(copy on write for blocks in snapshot,在写block时,在detachDir中保存一个备份,以便进行数据恢复)。
![](https://img-my.csdn.net/uploads/201210/25/1351168578_4195.jpg)