在默認情況下,一個MapReduce Job如果不設置Reducer的個數,那麼Reducer的個數爲1。具體,可以通過JobConf.setNumReduceTasks(int numOfReduceTasks)方法來設置Reducer的個數。那麼,如何確定Reducer的個數呢,Hadoop documentation 推薦了兩個計算公式:
- 0.95 * NUMBER_OF_NODES * mapred.tasktracker.reduce.tasks.maximum
- 1.75 * NUMBER_OF_NODES * mapred.tasktracker.reduce.tasks.maximum
其中,NUMBER_OF_NODES 代表集羣中計算節點的個數,mapred.tasktracker.reduce.tasks.maximum代表每一個節點所分配的Reducer任務槽的個數。