MapReduce數(shù)據(jù)傾斜優(yōu)化

      網(wǎng)友投稿 974 2022-05-28

      MapReduce 優(yōu)化

      Combiner和Partitioner是用來優(yōu)化MapReduce的,可以提高M(jìn)apReduce的運(yùn)行效率。下面我們來具體學(xué)習(xí)這兩個(gè)組件。

      Combiner

      我們以WordCount為例,首先通過下面的示意圖直觀的了解一下Combiner的位置和作用。

      從上圖可以看出,Combiner介于 Mapper和Reducer之間,combine作為 Map任務(wù)的一部分,執(zhí)行完 map 函數(shù)后緊接著執(zhí)行combine,而reduce 必須在所有的 Map 任務(wù)完成后才能進(jìn)行。 而且還可以看出combine的過程與reduce的過程類似,都是對(duì)相同的單詞key合并其詞頻,很多情況下可以直接使用reduce函數(shù)來完成Combiner過程。

      通過上面的分析,下面我們將深入理解 Combiner組件。

      1、Combiner可以看做局部的Reducer(local reducer)。

      1)Combiner作用是合并相同的key對(duì)應(yīng)的value。

      2)在Mapper階段,不管Combiner被調(diào)用多少次,都不應(yīng)改變 Reduce的輸出結(jié)果。

      3)Combiner通常與Reducer的邏輯是一樣的,一般情況下不需要單獨(dú)編寫Combiner,直接使用Reducer的實(shí)現(xiàn)就可以了。

      4)Combiner在Job中是如下設(shè)置的。

      job.setCombinerClass(Reducer.class);//Combiner一般情況下,默認(rèn)使用Reducer的實(shí)現(xiàn)

      2、Combiner的好處

      1)能夠減少M(fèi)ap Task輸出的數(shù)據(jù)量(即磁盤IO)。我們前面提到Map Task 將輸出的數(shù)據(jù)寫到本地磁盤,它輸出的數(shù)據(jù)量越多,它寫入磁盤的數(shù)據(jù)量就越大,那么開銷就越大,速度就越慢。

      2)能夠減少Reduce-Map網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量(網(wǎng)絡(luò)IO)。這個(gè)很好理解,Map Task 輸出越少,Reduce從Map結(jié)果中拉取的數(shù)據(jù)量就越少,自然就減少了網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。

      3、Combiner 的使用場景

      1)并不是所有的場景都可以使用Combiner,必須滿足結(jié)果可以累加。

      2)適合于Sum()求和,并不適合Average()求平均數(shù)。例如,求0、20、10、25和15的平均數(shù),直接使用Reduce求平均數(shù)Average(0,20,10,25,15),得到的結(jié)果是14, 如果先使用Combiner分別對(duì)不同Mapper結(jié)果求平均數(shù),Average(0,20,10)=10,Average(25,15)=20,再使用Reducer求平均數(shù)Average(10,20),得到的結(jié)果為15,很明顯求平均數(shù)并不適合使用Combiner。

      Partitioner

      我們通過如下示意圖,很直觀的看到 Partitioner 的位置和作用。

      從上圖我們可以看出,Partitioner 處于 Mapper階段,當(dāng)Mapper處理好數(shù)據(jù)后,這些數(shù)據(jù)需要經(jīng)過Partitioner進(jìn)行分區(qū),來選擇不同的Reducer處理,從而將Mapper的輸出結(jié)果均勻的分布在Reducer上面執(zhí)行。

      通過上面的分析,下面我們將深入理解 Partitioner組件。

      1、Partitioner決定了Map Task 輸出的每條數(shù)據(jù)交給哪個(gè)Reduce Task 來處理。Partitioner 有兩個(gè)功能:

      1)均衡負(fù)載。它盡量將工作均勻地分配給不同的 Reduce。

      2)效率。它的分配速度一定要非常快。

      2、Partitioner 的默認(rèn)實(shí)現(xiàn):hash(key) mod R,這里的R代表Reduce Task 的數(shù)目,意思就是對(duì)key進(jìn)行hash處理然后取模。很多情況下,用戶需要自定義 Partitioner,比如“hash(hostname(URL)) mod R”,它確保相同域名下的網(wǎng)頁交給同一個(gè) Reduce Task 來處理。 用戶自定義Partitioner,需要繼承Partitioner類,實(shí)現(xiàn)它提供的一個(gè)方法:

      getPartition(Text key, Text value, int numPartitions);

      前兩個(gè)參數(shù)分別為Map的key和value。numPartitions 為 Reduce 的個(gè)數(shù),用戶可以自己設(shè)置。

      Partitioner 和 Combiner 先后關(guān)系

      MapReduce 數(shù)據(jù)傾斜

      數(shù)據(jù)分布:

      正常的數(shù)據(jù)分布理論上都是傾斜的,就是我們所說的20-80原理:80%的財(cái)富集中在20%的人手中, 80%的用戶只使用20%的功能 , 20%的用戶貢獻(xiàn)了80%的訪問量 。

      MapReduce數(shù)據(jù)傾斜與優(yōu)化

      產(chǎn)生原因:

      Mapreduce程序在運(yùn)行的時(shí)候,運(yùn)行了大部分,但是還有部分reduce還在運(yùn)行,甚至長時(shí)間運(yùn)行,最終導(dǎo)致整個(gè)程序運(yùn)行時(shí)間很長才結(jié)束。

      造成這種現(xiàn)象的主要原因是:

      reduce程序處理的key的條數(shù)比其他key的條數(shù)大很多,這也就造成了分配到數(shù)據(jù)巨大的key的節(jié)點(diǎn)長時(shí)間運(yùn)行。本質(zhì)講數(shù)據(jù)傾斜就是數(shù)據(jù)分布不均。

      出現(xiàn)場景:

      不同的數(shù)據(jù)字段可能的數(shù)據(jù)傾斜一般有兩種情況:

      一種是唯一值非常少,極少數(shù)值有非常多的記錄值(唯一值少于幾千)

      一種是唯一值比較多,這個(gè)字段的某些值有遠(yuǎn)遠(yuǎn)多于其他值的記錄數(shù),但是它的占比也小于百分之一或千分之一

      解決方案:

      方式1:增加reduce 的jvm內(nèi)存

      既然reduce 本身的計(jì)算需要以合適的內(nèi)存作為支持,在硬件環(huán)境容許的情況下,增加reduce 的內(nèi)存大小顯然有改善數(shù)據(jù)傾斜的可能,這種方式尤其適合數(shù)據(jù)分布第一種情況,單個(gè)值有大量記錄, 這種值的所有紀(jì)錄已經(jīng)超過了分配給reduce 的內(nèi)存,無論你怎么樣分區(qū)這種情況都不會(huì)改變。

      方式2: 增加reduce 個(gè)數(shù)

      這個(gè)對(duì)于數(shù)據(jù)分布第二種情況有效,唯一值較多,單個(gè)唯一值的記錄數(shù)不會(huì)超過分配給reduce 的內(nèi)存. 如果發(fā)生了偶爾的數(shù)據(jù)傾斜情況,增加reduce 個(gè)數(shù)可以緩解偶然情況下的某些reduce 不小心分配了多個(gè)較多記錄數(shù)的情況. 但是對(duì)于第一種數(shù)據(jù)分布無效。

      方式3: 自定義partition

      如果map輸出鍵的單詞來源于一本書。其中大部分必然是省略詞(stopword: a,the,or )。那么就可以將自定義分區(qū)將這部分省略詞發(fā)送給固定的一部分reduce實(shí)例。而將其他的都發(fā)送給剩余的reduce實(shí)例。

      方式4:設(shè)定combiner

      減少流向reduce的文件數(shù)量,從而減輕reduce數(shù)據(jù)傾斜。

      網(wǎng)絡(luò) MapReduce

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:【GaussDB國慶獻(xiàn)禮】GaussDB 100 HA架構(gòu)技術(shù)建議書(1)
      下一篇:一加40張2K壁紙
      相關(guān)文章
      亚洲区日韩精品中文字幕| 日韩精品亚洲人成在线观看| 亚洲毛片在线观看| 亚洲人妻av伦理| 亚洲GV天堂GV无码男同| 亚洲av无码片区一区二区三区| 亚洲无圣光一区二区| 亚洲激情电影在线| 亚洲人成综合在线播放| 亚洲国产日韩女人aaaaaa毛片在线| 亚洲欧洲精品在线| 亚洲一级片在线观看| 亚洲一卡2卡3卡4卡国产网站| 亚洲国产成人久久精品app| 亚洲男人天堂影院| 亚洲一区在线免费观看| 亚洲妇女熟BBW| 亚洲av永久无码精品秋霞电影秋| 亚洲真人无码永久在线观看| 亚洲人成网亚洲欧洲无码| 亚洲成av人片在线天堂无| 色偷偷亚洲第一综合网| 亚洲国产精品不卡毛片a在线| 亚洲综合最新无码专区| 亚洲愉拍99热成人精品热久久| 九月丁香婷婷亚洲综合色| 亚洲高清在线观看| 亚洲人成毛片线播放| 国产亚洲福利在线视频| 亚洲av无码专区在线电影天堂 | 久久精品国产亚洲| 久久亚洲精品成人无码网站| 亚洲国产精品成人综合久久久| 国产精品亚洲精品青青青| 亚洲中文字幕精品久久| 亚洲精品无码久久久久YW| 亚洲AⅤ无码一区二区三区在线| 国产亚洲色视频在线| 亚洲Av无码专区国产乱码DVD| 亚洲精品动漫在线| 亚洲国产成人久久一区二区三区 |