2016-03-08 70 views
0

如果輸出太大以至於不適合減速器RAM,該怎麼辦? 例如一個排序任務。在這種情況下,輸出與輸入一樣大。如果你使用一個reducer,那麼所有的數據都不適合RAM。如何進行分類呢?是否可以用一個reducer執行任何mapreduce任務?

+0

你爲什麼認爲這發生在RAM中?它完全在磁盤上完成。 –

+0

它是否像外部合併排序一樣完成?在聚合的情況下會發生什麼?是否每次寫入reduce()調用都寫入磁盤? – Arighna

回答

1

我想我已經得到了答案。 是的,即使數據大於reduce的內存,也可以在單個reducer中執行任何map任務。在混洗階段,減速器將數據從映射器複製到減速器的內存,並對其進行分類,直到其溢出。一旦溢出內存,部分數據存儲在reducer本地磁盤中,並開始獲取新值。一旦它再次溢出,它將新數據與先前存儲的文件合併。合併的文件維護排序的時尚(可能使用外部合併排序)。一旦混洗完成了中間密鑰,數值對以分類方式存儲。然後對該數據執行減少任務。隨着數據的排序,通過在內存中一次獲取大量數據很容易進行內存中的聚合。

相關問題