hive.exec.reducers.max(默認爲999) 計算reducer數的公式很簡單: N=min(參數2,總輸入數據量/參數1) 通常情況下,有必要手動指定reducer個數。考慮到map階段的輸出數據量通常會比輸入有大幅減少,因此即使不設定reducer個數,重設參數2還是必要的。依據Hadoop的經驗,可以將參數2設定爲0.95*(集羣中TaskTracker個數)。 正確的reduce任務的 個數應該是 0.95或者1.75 ×(節點數 ×mapred.tasktracker.tasks.maximum參數值)
mapred.tasktracker.map.tasks.maximum 一般跟物理核數有關
然後,每個tasktracker還有一些其他服務線程(Hadoop自帶的),需要爲這些進程預留1~2個核比較好
所以,如果有8個核,可以有2*8-2=14個task
這14個task,可按照你自己需求分,如:8個map?slot,6個reduce?slot
實際上,只考慮核是不行的,還需要考慮內存,磁盤等
如果你有8個核,但只有1G內存,如果跑16個task,則每個task只有64MB內存,你的task能跑起來嗎?