原文連接:http://blog.csdn.net/aaa1117a8w5s6d/article/details/33781319node
對一 個job的map數和reduce數的設定對一個job的運行是很是重要的,而且很是簡單。如下是一些設 置這幾個值的經驗總結:網絡
hadoop distcp -Ddfs.block.size=$[256*1024*1024] /path/to/inputdata /path/to/inputdata-with-largeblocks的方式來將已經存在咋hdfs上的數據進行大塊化。而後刪除掉原先的文件。
------------------------------------------------------------------------------------------------------------------併發
MapReduce框架將文件分爲多個splits,併爲每一個splits建立一個Mapper,因此Mappers的個數直接由splits的數目決定。而Reducers的數目能夠經過job.setNumReduceTasks()函數設置,默認狀況只有一個Reducer。在真正的集羣環境下,若是默認,那麼全部的中間數據會發送給惟一的Reducer,致使任務變得很是緩慢。究竟設多少個Reducers合適呢?爲了解決這個問題,首先來了解一下slots的概念。app
slots有點相似一個資源池,每一個任務(map和reduce)執行時都必須得到一個slot才能繼續,不然只能等待。當一個任務完成後,該任務就歸還slot,這個過程有點相似釋放資源到資源池中。顯然,每個得到資源的任務均可以當即執行,無需等待。另外一方面,mapreduce的任務由tasktracker節點負責執行的,因此slots可進一步理解爲tasktrackers可以併發執行多個任務。slots分爲mapper slots和reducer slots,分別對應最大可並行執行的mapper和reducer數。用戶能夠經過修改mapred-site.xml配置文件的mapred.tasktracker.map.tasks.maxmum來設置slots的值,默認爲2.負載均衡
集羣中可用rducer slots 的總數等於集羣中的總結點數乘以每一個節點有多少個slots。reducers 數目的最佳值和reducer slots的總數有關,一般狀況下,讓reducers的數目略小於reducer slots的總數,這樣的目的:首先reducers能夠並行執行,減小排隊時間;其次對於未執行reducer的slots能夠在其餘reducer發生故障時,當即分配給新建立的reducer,不會明顯 加長任務總時間。框架
若是出現reducers》mappers的狀況就不合理了,這樣有些mappers會工做消耗資源開銷,可是對任務沒有任何幫助。tcp