Hadoop MapReduce程序中,reducer個數的設定極大影響執行效率,這使得Hive怎樣決定reducer個數成為一個關鍵問題。遺憾的是Hive的估計機制很弱,不指定reducer個數的情況下,Hive會猜測確定一個reducer個數,基於以下兩個設定:
1. hive.exec.reducers.bytes.per.reducer(默認為1000^3)
2. hive.exec.reducers.max(默認為999)
計算reducer數的公式很簡單:
N=min(參數2,總輸入數據量/參數1)
通常情況下,有必要手動指定reducer個數。考慮到map階段的輸出數據量通常會比輸入有大幅減少,因此即使不設定reducer個數,重設參數2還是必要的。依據Hadoop的經驗,可以將參數2設定為0.95*(集群中TaskTracker個數)。
轉自 http://www.alidata.org/archives/622
