首頁技術(shù)文章正文

Combiner操作,Combiner和partition的作用分別是什么?

更新時間:2021-07-20 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

combiner其實屬于優(yōu)化方案,由于帶寬限制,應(yīng)該盡量map和reduce之間的數(shù)據(jù)傳輸數(shù)量。它在Map 端把同一個key的鍵值對合并在一起并計算,計算規(guī)則與reduce一致,所以combiner也可以看作特殊的Reducer。

Partition作用

partition意思為分開,劃分。它分割map每個節(jié)點的結(jié)果,按照key分別映射給不同的reduce,也是可以自定義的。其實可以理解歸類。也可以理解為根據(jù)key或value及reduce的數(shù)量來決定當前的這對輸出數(shù)據(jù)最終應(yīng)該交由哪個reduce task處理。

partition的作用就是把這些數(shù)據(jù)歸類,將map的結(jié)果發(fā)送到相應(yīng)的reduce。

每個map任務(wù)會針對輸出進行分區(qū),及對每一個reduce任務(wù)建立一個分區(qū)。劃分分區(qū)由用戶定義的partition函數(shù)控制,默認使用哈希函數(shù)來劃分分區(qū)。

partition過程如下:

1)計算(key,value)所屬與的分區(qū)。

當map輸出的時候,寫入緩存之前,會調(diào)用partition函數(shù),計算出數(shù)據(jù)所屬的分區(qū),并且把這個元數(shù)據(jù)存儲起來。

2)把屬與同一分區(qū)的數(shù)據(jù)合并在一起。

當數(shù)據(jù)達到溢出的條件時(即達到溢出比例,啟動線程準備寫入文件前),讀取緩存中的數(shù)據(jù)和分區(qū)元數(shù)據(jù),然后把屬與同一分區(qū)的數(shù)據(jù)合并到一起。

Combiner作用

1)每一個map可能會產(chǎn)生大量的輸出,Combiner的作用就是在map端對輸出先做一次合并,以減少傳輸?shù)絩educer的數(shù)據(jù)量。

2)Combiner最基本是實現(xiàn)本地key的歸并,Combiner具有類似本地的reduce功能。

如果不用Combiner,那么,所有的結(jié)果都是reduce完成,效率會相對低下。

使用Combiner,先完成的map會在本地聚合,提升速度。

注意:Combiner的輸出是Reducer的輸入,如果Combiner是可插拔的,添加Combiner絕不能改變最終的計算結(jié)果。所以Combiner只應(yīng)該用于那種Reduce的輸入key/value與輸出key/value類型完全一致,且不影響最終結(jié)果的場景。比如累加,最大值等。

注意:

不是每種作業(yè)都可以做combiner操作的,只有滿足以下條件才可以:

1)combiner只應(yīng)該用于那種Reduce的輸入key/value與輸出key/value類型完全一致,因為combine本質(zhì)上就是reduce操作。

2)計算邏輯上,combine操作后不能影響計算結(jié)果,像求和,最大值就不會影響,求平均值就影響了。






猜你喜歡:

怎樣創(chuàng)建和使用Combiner組件?

MapReduce程序如何設(shè)置本地運行模式?

MapReduce編程開發(fā)實例——詞頻統(tǒng)計過程

黑馬程序員python+大數(shù)據(jù)開發(fā)培訓(xùn)

分享到:
在線咨詢 我要報名
和我們在線交談!