2016-11-24 59 views
-2

我被問到了這個問題假設我有10百萬個文件,其大小爲2 KB,那麼我可以將它存儲在hdfs中嗎?請回答這個問題。假設我有10萬個大小爲2 KB的文件,那麼我可以將它存儲在hdfs中嗎?

+0

當然你可以存儲.. – subodh

+2

歡迎來到StackOverflow。請注意,這不是一個免費的代碼寫入服務,但我們渴望幫助其他程序員(和有志之士)編寫他們自己的代碼。請閱讀[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)上的幫助主題。之後,請用您迄今編寫的代碼更新您的問題,以完成您希望實現的任務。 –

回答

2

HDFS是爲了處理大量的文件。如果你加載2 KB的文件就會開銷和負載加大對名稱節點,因爲它存儲有關文件的元數據。

塊大小是文件系統可以存儲的最小數據單位。如果你存儲一個2kb的文件,它將佔用一個塊。一旦你跨越了64Mb邊界,你需要第二個塊,讀操作的數量將會很大,這會增加讀取開銷。

最好的辦法是將所有2 Kb文件合併成一個文件並保存在hadoop上。

0

如果NameNode上有足夠的內存用於所有文件元數據,那麼可以存儲在HDFS中。此外,不要使用默認的64 MB塊大小來浪費HDFS空間,您可以指定每個文件的塊大小,因此可以設置爲2 KB(如果需要)。請注意,像這樣使用HDFS通過減少每個文件的塊大小來存儲大量的小文件是很好的。如果在大量小文件上運行MapReduce計算,將遇到問題。

另外,請注意64 MB是HDFS上的默認塊大小,但您可以自由設置大尺寸(128 MB或256 MB或更大),甚至更小。 HDFS本身沒有塊大小的概念,它是底層的本地文件系統(通常是Linux),它必須實施blocksize參數,這就是Linux在後臺執行的操作。