hadoop中每個節點map和reduce個數的設定調優
阿新 • • 發佈:2019-02-16
hadoop中每個節點map和reduce個數的設定調優
2012-02-21 14:40:32| 分類:舉報|字號訂閱
map red.tasktracker.map.tasks.maximum 這個是一個task tracker中可同時執行的map的最大個數,預設值為2,看《pro
hadoop》:it is common to set this value to theeffective number of CPUs on the node
把ob分割成map和reduce,合理地選擇Job中
Tasks數的大小能顯著的改善Hadoop執行的效能。增加task的個數會增加系統框架的開銷,但同時也會增強負載均衡並降低任務失敗的開銷。一個極端是
Map任務的數量
Map的數量經常是由輸入資料中的DFS塊的數量來決定的。這還經常會導致使用者通過調整DFS塊大小來調整map的數量。正確的map任務的並行度似乎應該是10-100 maps/節點,儘管我們對於處理cpu運算量小的任務曾經把這個數字調正到300maps每節點。Task的初始化會花費一些時間,因此最好控制每個 map任務的執行超過一分鐘。實際上控制map任務的個數是很精妙的。mapred.map.tasks引數對於InputFormat設定
Map任務的個數也能通過使用JobConf 的 conf.setNumMapTasks(int num)方法來手動地設定。這個方法能夠用來增加
Reduce任務的個數正確的reduce任務的個數應該是0.95或者1.75 ×(節點數 ×mapred.tasktracker.tasks.maximum引數值)。如果任務數是節點個數的0.95倍,那麼所有的reduce任務能夠在 map任務的輸出傳輸結束後同時開始執行。如果任務數是節點個數的1.75倍,那麼高速的節點會在完成他們第一批reduce任務計算之後開始計算第二批 reduce任務,這樣的情況更有利於負載均衡。目前reduce任務的數量由於輸出檔案緩衝區大小(io.buffer.size × 2 ×reduce任務個數 << 堆大小),被限制在大約1000個左右。直到能夠指定一個固定的上限後,這個問題最終會被解決。
Reduce任務的數量同時也控制著輸出目錄下輸出檔案的數量,但是通常情況下這並不重要,因為下一階段的 map/reduce任務會把他們分割成更加小的片段。
Reduce任務也能夠與 map任務一樣,通過設定JobConf 的conf.setNumReduceTasks(int num)方法來增加任務個數。