2014-10-01 43 views
1

在Hadoop中是否有一種明智的方式來編寫大量的輸出文件?我一直在使用MultipleOutputs。但是,MultipleOutputs爲每個文件分配一個大的(〜1MB)緩衝區,所以我遇到了內存問題。大量的Hadoop輸出文件

我的數據排序是這樣的,在任何給定的reducer中,我都可以寫入目標文件,關閉它,然後繼續下一個。不幸的是,MultipleOutputs不公開一種關閉給定文件的方法。我寫了一個修改後的MultipleOutputs,它公開了這樣一種方法,並處理了這個問題,但這看起來並不理想。

另一種方法是將我的輸出分割成所需文件的最後一步,但我不確定是否有這樣做的好方法。

+0

請定義「大數」。你希望的功能是什麼?輸出文件的數量等於減速器的數量,因此快速解決方法是將所需的減速器數量設置爲所需的輸出文件數量。 – vefthym 2014-10-02 10:08:13

+0

我不願意那樣做;輸出的尺寸大不相同。本質上,我想將輸出分成大約一千個邏輯單元,按特定ID分割。使用MultipleOutputs,因爲它應該使用,這導致每個reducer一千個輸出,我很好,他們可以稍後合併,但由於MultipleOutput使用一個大的緩衝區每輸出我遇到內存問題。我可以通過破解MultipleOutput來緩解這個問題,以便在作業結束之前關閉文件,因爲我的地圖輸出是按照ID排序的,但這並不理想。 – 2014-10-02 12:00:19

回答

1

每個reducer都會生成一個輸出文件,更多的是no。還原劑更多的沒有。的o/p文件和較小的大小。

可能你可以限制你的號碼。的還原劑。 但確保有限減速器得到優化。

例如如果設置redurs = 1,那麼只有1個進程必須處理所有映射器數據,因此會增加處理時間。