Map端的聚合操作Combiner
需求
詞頻統(tǒng)計,假設(shè)有一個文件,統(tǒng)計這個文件詞頻
常見的解決辦法
例如原始文本是:
 交給兩個Map去處理,map1處理hello is hello is,map2處理hadoop is hadoop is hadoop,輸出結(jié)果map1為:(hello,1)(is, 1)(hello, 1)(is, 1),map2為(hadoop,1)(is, 1)(hadoop, 1)(is, 1)(hadoop,1)。然后把結(jié)果給shuffle,shuffle按照相同的key(會按照字典順序排序)丟給Reducer中去處理。
 
問題
map1中有4個Key,map2中有4個Key,一共9個Key。但是在Reducer中一共只輸出了3個Key。如果map1中處理1000萬個key,第二個處理1000萬個Key,所有的數(shù)據(jù)都要經(jīng)過網(wǎng)絡(luò)傳輸,性能一定會受影響。
解決辦法
如果在map端再做一次聚合,是不是就會提高性能了。這個聚合的操作和我們的Reduce邏輯完全一樣。
 
 這個Map端的聚合操作就叫做Combiner。
 這樣能很大程度上節(jié)省網(wǎng)絡(luò)開銷。
實現(xiàn)方法
 跟Reducer的方法是一樣的,直接添加上Reducer就可以了。
Combiner的優(yōu)點
能減少IO,提升作業(yè)的執(zhí)行性能
Combiner的局限性
在求平均數(shù)的場景下,會出現(xiàn)錯誤的結(jié)果。
總結(jié)
以上是生活随笔為你收集整理的Map端的聚合操作Combiner的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: windows连接远程Hadoop/Sp
 - 下一篇: MapReduce自定义Partitio