2016-06-29 237 views
1

我有一個使用少量數據(200 MB)的Mapreduce作業。地圖階段計算簡單,但縮小階段的計算量很大,需要花費更多的時間來分析一個輸入。給定32 MB的分割大小,我發現在映射階段所有機器都在計算,但在縮小階段只有一個是,而縮小階段要慢得多。有沒有一種方法可以使分割更小,僅用於縮小作業階段,以便我可以將所有機器用於縮小階段?hadoop減少拆分大小

+0

您的製圖人員製作了多少個關鍵組? –

+0

@BinaryNerd我怎麼知道? – user4052054

+0

看看你的工作櫃檯,它是一個標準櫃檯。你也應該知道你的關鍵是什麼,以及你期望它的粒度。例如,如果您有一個鍵,則只會運行一個縮減器。 –

回答

1

分割大小不會影響並行度的降低。它只會推動mappers的數量。

的MapReduce任務,您可以指定減速機使用的數量。您可以將mapreduce.job.reduces屬性設置爲默認值1,也可以使用Job.setNumReduceTasks(int tasks)see javadoc)。在這裏,你想增加這個數字。

更高層次的工具(如Apache Crunch)會根據輸入大小,提供的比例因子和每個Reducer的目標輸入大小自動設置Reducer的數量。如果一些任務的硬編碼不符合您的需求,您可以輕鬆實施類似的策略。