1)提前在map進(jìn)行combine,減少傳輸?shù)臄?shù)據(jù)量
在Mapper加上combiner相當(dāng)于提前進(jìn)行reduce,即把一個Mapper中的相同key進(jìn)行了聚合,減少shuffle過程中傳輸?shù)臄?shù)據(jù)量,以及Reducer端的計算量。
如果導(dǎo)致數(shù)據(jù)傾斜的key大量分布在不同的mapper的時候,這種方法就不是很有效了。
2)導(dǎo)致數(shù)據(jù)傾斜的key 大量分布在不同的mapper
(1)局部聚合加全局聚合。
第一次在map階段對那些導(dǎo)致了數(shù)據(jù)傾斜的key 加上1到n的隨機(jī)前綴,這樣本來相同的key 也會被分到多個Reducer中進(jìn)行局部聚合,數(shù)量就會大大降低。
第二次mapreduce,去掉key的隨機(jī)前綴,進(jìn)行全局聚合。
思想:二次mr,第一次將key隨機(jī)散列到不同reducer進(jìn)行處理達(dá)到負(fù)載均衡目的。第二次再根據(jù)去掉key的隨機(jī)前綴,按原key進(jìn)行reduce處理。
這個方法進(jìn)行兩次mapreduce,性能稍差。
(2)增加Reducer,提升并行度
JobConf.setNumReduceTasks(int)
(3)實現(xiàn)自定義分區(qū)
根據(jù)數(shù)據(jù)分布情況,自定義散列函數(shù),將key均勻分配到不同Reducer








暫無數(shù)據(jù)