hive數(shù)據(jù)傾斜原理與解決方案

一?數(shù)據(jù)傾斜原理

join實(shí)現(xiàn)原理

sql = select name, orderid

from user t1

join order t2

on t1.uid=t2.uid

group by 實(shí)現(xiàn)原理

sql = select rank, isonline, count(1)

from city

group by 1, 2

數(shù)據(jù)傾斜出現(xiàn)原因

1、對于join過程來說西乖,如果出項(xiàng)較多的key值為空或異常的記錄靡馁,或key值分布不均勻葫隙,就容易出現(xiàn)數(shù)據(jù)傾斜,

2、對于group by 過程來說畔勤,如果某一個(gè)key值有特別的多的記錄,其它key值的記錄比較少,也容易出項(xiàng)數(shù)據(jù)傾斜脉顿。

二?數(shù)據(jù)傾斜的解決方案

join引起數(shù)據(jù)傾斜的解決方法

1、如果是由于key值為空或?yàn)楫惓S涗浀懔龋疫@些記錄不能被過濾掉的情況下艾疟,可以考慮給key賦一個(gè)隨機(jī)值,將這些值分散到不同的reduce進(jìn)行處理。

2蔽莱、如果是一個(gè)大表和一個(gè)小表join的話弟疆,可以考慮使用mapjoin來避免數(shù)據(jù)傾斜,mapjoin的具體過程如下盗冷。分為兩步:

1) 通過mapreduce local task, 掃描小表怠苔,生成為一個(gè)hashtable文件, 并上傳到distributed cache

2) 在map階段,每個(gè)mapper, 從distributed cache中讀取hashtable文件仪糖,掃描大表柑司,并直接在map端join

3)在key值都為有效值時(shí),還可以通過設(shè)置每個(gè)reduce處理的數(shù)據(jù)量的大小來處理數(shù)據(jù)傾斜锅劝,即:

set hive.exec.reducers.bytes.per.reducer = 1000000000或

set mapred.reduce.tasks=800 這兩個(gè)一般不同時(shí)使用攒驰,

另外,還可以設(shè)置下面兩個(gè)參數(shù):

set hive.optimize.skewjoin = true;

set hive.skewjoin.key = skew_key_threshold (default = 100000)

可以就按官方默認(rèn)的1個(gè)reduce 只處理1G 的算法鸠天,那么skew_key_threshold= 1G/平均行長.或者默認(rèn)直接設(shè)成250000000 (差不多算平均行長4個(gè)字節(jié))

group by 引起數(shù)據(jù)傾斜的解決方法

set hive.map.aggr=true讼育,開啟map之后使用combiner,這樣基本上是對各記錄比較同質(zhì)的數(shù)據(jù)效果比較好稠集,相反奶段,則沒有什么意義。通用的做法是設(shè)置下面兩個(gè)參數(shù):

set hive.groupby.mapaggr.checkinterval = 100000 (默認(rèn))執(zhí)行聚合的條數(shù)

set hive.map.aggr.hash.min.reduction=0.5(默認(rèn))如果hash表的容量與輸入行數(shù)之比超過這個(gè)數(shù)剥纷,那么map端的hash聚合將被關(guān)閉痹籍,默認(rèn)是0.5,設(shè)置為1可以保證hash聚合永不被關(guān)閉晦鞋;

還有一個(gè)是set hive.groupby.skewindata=true蹲缠, 這個(gè)只針對單列有效。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悠垛,一起剝皮案震驚了整個(gè)濱河市线定,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌确买,老刑警劉巖斤讥,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異湾趾,居然都是意外死亡芭商,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進(jìn)店門搀缠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铛楣,“玉大人,你說我怎么就攤上這事艺普◆ぶ荩” “怎么了鉴竭?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勿侯。 經(jīng)常有香客問我拓瞪,道長缴罗,這世上最難降的妖魔是什么助琐? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮面氓,結(jié)果婚禮上兵钮,老公的妹妹穿的比我還像新娘。我一直安慰自己舌界,他們只是感情好掘譬,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呻拌,像睡著了一般葱轩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上藐握,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天靴拱,我揣著相機(jī)與錄音,去河邊找鬼猾普。 笑死袜炕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的初家。 我是一名探鬼主播偎窘,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼溜在!你這毒婦竟也來了陌知?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤掖肋,失蹤者是張志新(化名)和其女友劉穎仆葡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體培遵,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浙芙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了籽腕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗡呼。...
    茶點(diǎn)故事閱讀 40,444評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖皇耗,靈堂內(nèi)的尸體忽然破棺而出南窗,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布万伤,位于F島的核電站窒悔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏敌买。R本人自食惡果不足惜简珠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虹钮。 院中可真熱鬧聋庵,春花似錦、人聲如沸芙粱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽春畔。三九已至脱货,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間律姨,已是汗流浹背振峻。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留线召,地道東北人铺韧。 一個(gè)月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像缓淹,于是被迫代替她去往敵國和親哈打。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容