本篇內容主要講解“如何用mapreduce處理數(shù)據傾斜問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何用mapreduce處理數(shù)據傾斜問題”吧!
我們提供的服務有:成都網站設計、成都做網站、微信公眾號開發(fā)、網站優(yōu)化、網站認證、香河ssl等。為超過千家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的香河網站制作公司
map /reduce 程序執(zhí)行時, reduce 節(jié)點大部分執(zhí)行完畢,但是有一個或者幾個 reduce
節(jié)點運行很慢,導致整個程序的處理時間很長,這是因為某一個 key 的條數(shù)比其他 key 多
很多(有時是百倍或者千倍之多),這條 key 所在的 reduce 節(jié)點所處理的數(shù)據量比其他節(jié)
點就大很多,從而導致某幾個節(jié)點遲 遲運行不完,此稱之為數(shù)據傾斜.
解決方法:
(1)設置一個 hash 份數(shù) N,用來對條數(shù)眾多的 key 進行打散。
(2)對有多條重復 key 的那份數(shù)據進行處理:從 1 到 N 將數(shù)字加在 key 后面作為新 key,
如果需要和另一份數(shù)據關聯(lián)的話,則要重寫比較類和分發(fā)類。如此實現(xiàn)多條 key 的平均分發(fā)。
(3)上一步之后, key 被平均分散到很多不同的 reduce 節(jié)點。如果需要和其他數(shù)據關聯(lián),
為了保證每個 reduce 節(jié)點上都有關聯(lián)的 key,對另一份單一 key 的數(shù)據進行處理:循環(huán)的
從 1 到 N 將數(shù)字加在 key 后面作為新 key
用上述的方法雖然可以解決數(shù)據傾斜,但是當關聯(lián)的數(shù)據量巨大時,如果成倍的增長某
份數(shù)據,會導致 reduce shuffle 的數(shù)據量變的巨大,得不償失,從而無法解決運行時間慢的
問題.
在 兩份數(shù)據中找共同點,比如兩份數(shù)據里除了關聯(lián)的字段以外,還有另外相同含義的字段,
如果這個字段在所有 log 中的重復率比較小,則可以用這個字段作為計算 hash 的值,如果
是數(shù)字,可以用來模 hash 的份數(shù),如果是字符可以用 hashcode 來模 hash 的份數(shù)(當然數(shù)
字為了避免落到同一個 reduce 上 的數(shù)據過多,也可以用 hashcode),這樣如果這個字段
的值分布足夠平均的話,就可以解決上述的問題。
解決方法: 1. 增加 reduce 的 jvm 內存 2. 增加 reduce 個數(shù)
到此,相信大家對“如何用mapreduce處理數(shù)據傾斜問題”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!