2014-03-03 27 views
0

我知道map reduce輸出存儲在名爲part-r- *的文件中,用於reducer和part-m- *對於映射器。如何在地圖中創建輸出文件(part-m-0001/part-r-0001)reduce

當我運行MapReduce工作有時得到一個單一的文件全輸出(約150MB大小),有時幾乎相同的數據的大小,我得到兩個輸出文件(一個100MB和50MB等)。這對我來說似乎很隨意。我找不到任何理由。

我想知道它是如何決定把這些數據放在一個或多個輸出文件中。如果有任何方法我們可以控制它。

感謝

回答

4

與Jijo在這裏的答案中指定的不同 - 文件數量取決於減速器/映射器的數量。

它與羣集中物理節點的數量無關。

規則是:一個Reducer的一個part-r- *文件。 Reducers的數量由設置job.setNumReduceTasks();

如果在你的工作中沒有Reducers - 那麼一個Mapper的部分m- *文件。對於一個InputSplit有一個Mapper(通常 - 除非使用自定義InputFormat實現,否則輸入數據的一個HDFS塊有一個InputSplit)。

+0

非常感謝,這有助於 – sunil

0

如果您有一個單節點集羣,那麼你將有隻有一個部分-R- *文件,否則如果你有多節點羣集中,那麼你將有一個數量的減少文件,有節點。

請注意,您可以使用job.setNumReduceTasks(1);來控制此行爲,它可以設置您想要的輸出文件的數量。這隻適用於減速器

1

輸出文件部分 - 間 - *和部分-R- *分別根據的地圖任務的數量和數設置減少任務數。