2016-11-14 128 views
3

我需要在HDFS上存儲大約10TB的大文件。我需要了解的是HDFS如何存儲這個文件。假設羣集的複製因子是3,並且每個節點上有10個節點的磁盤空間超過10 TB的羣集,即總羣集容量超過100TB。在hadoop HDFS中存儲大文件?

現在HDFS會隨機選擇三個節點並將文件存儲在這三個節點上。那麼這聽起來很簡單。請確認?

或者HDFS是否將文件拆分爲 - 分別稱爲每個1TB的10個拆分,然後將每個拆分存儲在隨機選擇的3個節點上。所以分裂是可能的,如果是的話,它是通過它啓用的配置方面。 如果HDFS必須分割二進制或文本文件 - 它是如何分割的。只需按字節。

+1

除非您打算使用的格式是可分割的,否則這是一個糟糕的主意。從HDFS的角度來看,這並不重要,但對於MapReduce而言,如果它不可分割,則只有一個映射器能夠處理所述文件。 –

回答

8

是的,它分割文件(默認情況下,在128mb塊)。每個塊將被存儲在3個隨機節點上。因此,您將有10TB的數據均勻分佈在10個節點上。

+1

您可以添加更多關於如何完成拆分的細節 - 如果字節再見字節或其他機制。爲什麼我需要知道這一點 - 如果我編寫map reduce程序,hadoop如何知道哪些數據位於哪個節點等等關於數據局部性的信息。 – samshers

+2

名稱節點管理關於文件被分割成的所有不同塊的元數據,其中每個塊(在哪個數據節點上)以及副本的製作位置。可以配置塊大小和複製因子。將文件分割由您用來將文件寫入HDFS的客戶端完成。如果一條線大於塊大小,那麼該線仍然會被分割並放置在兩個塊中。看到這個鏈接詳細解釋 - http://stackoverflow.com/questions/14291170/how-does-hadoop-process-records-split-across-block-boundaries –