2017-03-02 27 views

回答

0

您不能在HDFS中的單個塊內存儲多個文件,這是HDFS的基本規則。在你的情況下,HDFS塊的使用效果不好,總共128MB的塊中只有10MB被使用,其餘的118MB不能被任何其他文件使用,並且它將保持空閒狀態。 (這裏要注意的一點是,HDFS塊是邏輯的,你的HDFS塊只需要10MB的物理存儲空間,儘管你已經設置爲128MB)。到許多HDFS塊到文件不能是一對多的。

+1

你可以簡單地寫一個包含每個文件作爲記錄的序列文件。 –

+0

是的,否則你可以先加載到臨時表(如果文件在s3中,你可以創建一個外部表),然後插入你的核心表。 – MikA

0

首先你不能以這種方式存儲(16個HDFS塊)。

爲了爲這些文件產生大約16個映射器,可以使用CombileFileInputFormat,這樣它就會合並文件直到滿足提供的限制。 (在邊界情況下不同)。

需要指定: - mapreduce.input.fileinputformat.split.maxsizemapreduce.input.fileinputformat.split.minsize

1

最好的辦法是改變你的過程,寫到HDFS保存一個等於(或)近似等於塊大小的文件。這將確保您正在優化塊大小,並且在Hadoop集羣上執行任何作業時,它將啓動等於塊或分割的地圖任務數量。

如果輸入數據集太大,一種理想的方法是進一步壓縮數據,然後保存在HDFS中。這將減少集羣中保存的數據的佔用空間,並提高讀取數據的作業性能。

相關問題