MapReduce過程中,如果Map之後每個Key對應Value的數量不平衡會不會影響效率?

時間 2021-05-31 14:12:22

1樓:markxiao

是的,相同的key是會發到同乙個reduce處理。如果相同的key對應的value量級太大確實會導致這個reduce很慢。如果其他的reduce要處理的資料相對較少,就會出現資料傾斜。

資料傾斜一般是指某乙個partitioner的處理的資料量遠大於其他的partitioner,這個在分布式系統中很常見。一般有兩種原因:(1)partition演算法不夠隨機,這種情況比較少見,換相對隨機的演算法就可以。

(2)某個key對應的資料非常多,而這個key對應的資料又必須傳送到同乙個partitioner進行處理。

對於第二種資料傾斜沒有乙個統一的處理方式,要看具體問題。一般常見的方式可以將key加乙個隨機擾動量,使得量大的這個key均勻分到不同的reduce中去處理。再起一輪mapreduce處理這次的結果,將key的擾動量去掉,去統計結果。

因為第一步reduce處理將key對應的結果大大減少了(題主這個case每個reduce乙個key只輸出一條記錄),所以到第二輪mapreduce這個key對應的資料就很少了。

另外,如果乙個map輸出的相同的key記錄很多,可以加combiner進行map端的reduce,減少資料量。對於題主的這個case的資料傾斜應該也是有效的,前提是你這個量很大的key在所有的map中也相對均勻的。不然也會導致少量map執行特別久。

2樓:于曉龍

我記得在網上看到過類似解決方案。出現這種情況的話,可以在相同的key上做個二級標記,然後再選用合適的partion策略。比如單詞 we出現10w次,而其他單詞只出現幾次,那可以對we進行人為二級劃分,比如we-1,we-2.....

we99,we100。這樣雖然咱們知道key是一樣的,但是機器卻認為key不一樣。最後再增加個reduce進行規約。

3樓:qiqiqi

當然會影響效率,試想一下,如果極端情況,假設shuffle過程產生了100個Key, 假設某個Key匯聚了10萬個值,而其它Key都匯聚了乙個值。巨集觀上看,幾乎所有資料不就都匯聚到乙個節點,集群豈不是變成了單機。Spark本身提供了兩種Key機制,Hash 和Range,另外還支援使用者自定義的Key型別。

針對不Key平衡的情況,可以考慮通過Range,把多個稀疏的Key值劃在乙個Key的範圍內,這樣可以保持Key的相對平衡。

損傷修復過程中巨噬細胞如何從M1型向M2型轉化?

巍乎鍾道 損傷修復過程中,將巨噬細胞極化為M2 tissue repair type anti inflammatory regulatory type 的是白介素 4 IL 4 Nat Rev Immunol,2008,8 12 958 969 除了IL 4之外,巨噬細胞還可以在很多種物質和訊號的...

自學Javaweb過程中的煩惱?

Tnlj 同大三,經歷過幾個專案後也能很熟練的使用ssm ssh等進行開發。再往下走的話覺得可以多了解幾種資料庫mongodb redis啥的,可以了解了解分布式 張浩斌 不用別人的框架試試,保準能學到新東西,能感覺有提公升。參考https www.看完不打算噴我的話可以繼續看下面的,否則慎點。 你...

交易系統的構建過程中 交易的實際操作過程中,存在著什麼樣的理念 思想作為指導

李子明 我覺得有幾點 第一,要深入分析你自己,你自己最擅長什麼?最弱的是什麼?從長遠的時間和N次交易過後,基本你都在做你最擅長的事,同時因為你的弱點而虧損或者喪失盈利。所以塞科塔才會說那句玄之又玄的話 所有的交易者都能在市場中得到他想要的 雖然表面你肯定是想賺錢,可是潛意識裡面呢?第二,確實要順勢去...