更新時(shí)間:2021年07月20日16時(shí)14分 來(lái)源:傳智教育 瀏覽次數(shù):
combiner其實(shí)屬于優(yōu)化方案,由于帶寬限制,應(yīng)該盡量map和reduce之間的數(shù)據(jù)傳輸數(shù)量。它在Map 端把同一個(gè)key的鍵值對(duì)合并在一起并計(jì)算,計(jì)算規(guī)則與reduce一致,所以combiner也可以看作特殊的Reducer。
Partition作用
partition意思為分開,劃分。它分割map每個(gè)節(jié)點(diǎn)的結(jié)果,按照key分別映射給不同的reduce,也是可以自定義的。其實(shí)可以理解歸類。也可以理解為根據(jù)key或value及reduce的數(shù)量來(lái)決定當(dāng)前的這對(duì)輸出數(shù)據(jù)最終應(yīng)該交由哪個(gè)reduce task處理。
partition的作用就是把這些數(shù)據(jù)歸類,將map的結(jié)果發(fā)送到相應(yīng)的reduce。
每個(gè)map任務(wù)會(huì)針對(duì)輸出進(jìn)行分區(qū),及對(duì)每一個(gè)reduce任務(wù)建立一個(gè)分區(qū)。劃分分區(qū)由用戶定義的partition函數(shù)控制,默認(rèn)使用哈希函數(shù)來(lái)劃分分區(qū)。
partition過(guò)程如下:
1)計(jì)算(key,value)所屬與的分區(qū)。
當(dāng)map輸出的時(shí)候,寫入緩存之前,會(huì)調(diào)用partition函數(shù),計(jì)算出數(shù)據(jù)所屬的分區(qū),并且把這個(gè)元數(shù)據(jù)存儲(chǔ)起來(lái)。
2)把屬與同一分區(qū)的數(shù)據(jù)合并在一起。
當(dāng)數(shù)據(jù)達(dá)到溢出的條件時(shí)(即達(dá)到溢出比例,啟動(dòng)線程準(zhǔn)備寫入文件前),讀取緩存中的數(shù)據(jù)和分區(qū)元數(shù)據(jù),然后把屬與同一分區(qū)的數(shù)據(jù)合并到一起。
Combiner作用
1)每一個(gè)map可能會(huì)產(chǎn)生大量的輸出,Combiner的作用就是在map端對(duì)輸出先做一次合并,以減少傳輸?shù)絩educer的數(shù)據(jù)量。
2)Combiner最基本是實(shí)現(xiàn)本地key的歸并,Combiner具有類似本地的reduce功能。
如果不用Combiner,那么,所有的結(jié)果都是reduce完成,效率會(huì)相對(duì)低下。
使用Combiner,先完成的map會(huì)在本地聚合,提升速度。
注意:Combiner的輸出是Reducer的輸入,如果Combiner是可插拔的,添加Combiner絕不能改變最終的計(jì)算結(jié)果。所以Combiner只應(yīng)該用于那種Reduce的輸入key/value與輸出key/value類型完全一致,且不影響最終結(jié)果的場(chǎng)景。比如累加,最大值等。
注意:
不是每種作業(yè)都可以做combiner操作的,只有滿足以下條件才可以:
1)combiner只應(yīng)該用于那種Reduce的輸入key/value與輸出key/value類型完全一致,因?yàn)閏ombine本質(zhì)上就是reduce操作。
2)計(jì)算邏輯上,combine操作后不能影響計(jì)算結(jié)果,像求和,最大值就不會(huì)影響,求平均值就影響了。
猜你喜歡:
Combiner組件創(chuàng)建和使用演示【大數(shù)據(jù)文章】
北京校區(qū)