Hadoop学习之Combiner
在Hadoop中,有一種處理過程叫Combiner,與Mapper和Reducer在處于同等地位,但其執行的時間介于Mapper和Reducer之間,其實就是Mapper和Reducer的中間處理過程,Mapper的輸出是Combiner的輸入,Combiner的輸出是Reducer的輸入。
例如獲取歷年的最高溫度例子,以書中所說的1950年為例,在兩個不同分區上的Mapper計算獲得的結果分別如下:
第一個Mapper結果:(1950, [0, 10, 20])
第二個Mapper結果:(1950, [25, 15])
?
如果不考慮Combiner,按照正常思路,這兩個Mapper的結果將直接輸入到Reducer中處理,如下所示:
MaxTemperature:(1950, [0, 10, 20, 25, 15])
最終獲取的結果是25。
如果考慮Combiner,按照正常思路,這兩個Mapper的結果將分別輸入到兩個不同的Combiner中處理,獲得的結果分別如下所示:
第一個Combiner結果:(1950, [20])
第二個Combiner結果:(1950, [25])
然后這兩個Combiner的結果會輸出到Reducer中處理,如下所示
MaxTemperature:(1950, [20, 25])
最終獲取的結果是25。
由上可知:這兩種方法的結果是一致的,使用Combiner最大的好處是節省網絡傳輸的數據,這對于提高整體的效率是非常有幫助的。
?
但是,并非任何時候都可以使用Combiner處理機制,例如不是求歷年的最高溫度,而是求平均溫度,則會有另一種結果。同樣,過程如下,
如果不考慮Combiner,按照正常思路,這兩個Mapper的結果將直接輸入到Reducer中處理,如下所示:
AvgTemperature:(1950, [0, 10, 20, 25, 15])
最終獲取的結果是14。
如果考慮Combiner,按照正常思路,這兩個Mapper的結果將分別輸入到兩個不同的Combiner中處理,獲得的結果分別如下所示:
第一個Combiner結果:(1950, [10])
第二個Combiner結果:(1950, [20])
然后這兩個Combiner的結果會輸出到Reducer中處理,如下所示
AvgTemperature:(1950, [10, 20])
最終獲取的結果是15。
由上可知:這兩種方法的結果是不一致的,所以在使用Combiner時,一定三思而后行,仔細思量其是否適合,否則可能造成不必要的麻煩。
?
?
轉載于:https://www.cnblogs.com/baolebei/p/3836696.html
總結
以上是生活随笔為你收集整理的Hadoop学习之Combiner的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gdb的user-define comm
- 下一篇: 【大数据】Linux下Storm(0.9