2011-12-19 80 views

回答

13

多個文件不存儲在一個塊中。順便說一句,單個文件可以存儲在多個塊中。文件和block-id之間的映射被保存在NameNode中。

按照Hadoop : The Definitive Guide

不同於單個磁盤文件系統,HDFS中的文件比單塊小不佔用底層存儲的整個數據塊的價值。

HDFS旨在處理大型文件。如果有太多的小文件,那麼NameNode可能會被加載,因爲它存儲了HDFS的名稱空間。檢查此article如何緩解太多小文件的問題。

+0

你知道如何找到塊到文件的映射嗎? 'hadoop fsck/-files -blocks -locations -racks'給出文件來阻止映射,但是並沒有說實際文件系統上的哪個目錄是位於哪個塊(即它在子目錄9或子目錄61中)。 – Eugen 2011-12-19 15:39:58

+0

'dfs.datanode.data.dir'屬性決定了本地文件系統上DFS數據節點應該存儲其塊的位置。如果這是以逗號分隔的目錄列表,則數據將存儲在所有已命名的目錄中,通常位於不同的設備上。不存在的目錄被忽略。 – 2011-12-19 16:33:14

+0

不,我的意思是當物理塊被存儲時,它們可以存儲在'dfs.datanode.data.dir'或者該目錄下的子目錄中(由Datanode創建)。有沒有辦法找到哪個塊存儲在哪裏(作爲頂級文件或在某個子目錄中)? – Eugen 2011-12-19 22:22:14

3

那麼你可以使用HAR(Hadoop Archive)文件系統來嘗試將多個小文件打包到由HAR文件系統管理的特殊部分文件的HDFS塊中。

3

塊將存儲單個文件。如果你的文件大於BlockSize(64/128/..),那麼它將被分成多個塊,並且分別具有BlockSize。

0

主要點需要在HDFS理解,file is partioned into blocks based on size且不會有在存儲器中,存儲文件的某些塊(這是誤解)

基本上多個文件不存儲在單個塊(除非它是檔案或Har文件)。

2

Hadoop塊大小是Hadoop存儲概念。每次當您將文件存儲在Hadoop中時,它將被劃分爲塊大小,並且基於複製因子和數據局部性,它將分佈在羣集中。

有關詳情:

  • 當你推HDFS上的文件時,它將被劃分成塊。每個塊就像塊大小所描述的具有最大大小的單個文件。

  • 每個塊都會包含一個.meta文件,以便在Hadoop上存儲該塊的元數據信息。

  • 如果文件非常小,那麼整個文件將在一個塊中,並且塊(存儲文件)將具有與文件和元文件相同的大小。

一些命令:

  • 連接到羣集上的任何數據節點[如果你有機會;)。然後轉到該節點的存儲目錄,您可以看到存儲在數據節點上的實際塊如下所示。

(DIR的是按我的簇 -/DATA2/DFS/DN /):

塊大小:1 GB

坎德拉/數據/ DFS/DN - >電流 - >最終確定 - > subDir0 - >(這裏是黃金

塊只使用KB的存儲對於小文件或者文件大小是我的塊大小+一些KB的

012可能是

-rw-R - R-- 1個HDFS HDFS 91K年09月13十六時19 blk_1073781504

-rw-R - R-- 1個HDFS HDFS 19K年09月13 16時21 blk_1073781504_40923.meta

當文件更大然後是塊大小的塊看起來像的東西,如下

-RW-R - R-- 1個HDFS HDFS 1.0G 8月31日12:03 blk_1073753814

-RW -r - r-- 1 hdfs hdfs 8.1M Aug 31 12:04 blk_1073753814_12994.meta

我希望它能解釋塊存儲的東西。如果您想知道您的文件如何存儲塊中的細節,然後運行

HDFS的fsck -blocks -locations

讓我知道如果我在這裏漏掉了什麼。