首先在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中保存一個備份,以便進行數據恢復)。