hive-數(shù)據(jù)傾斜解決詳解

hive在跑數(shù)據(jù)時經(jīng)常會出現(xiàn)數(shù)據(jù)傾斜的情況。使的作業(yè)經(jīng)常reduce時卡住較長時間营曼,有時完成任務(wù)的百分百比甚至?xí)赝似寡椋绻闩龅竭@種情況,”恭喜“你蒂阱,你遇到數(shù)據(jù)傾斜了锻全。

以下是幾種常見的數(shù)據(jù)傾斜場景:

1狂塘、join的key值發(fā)生傾斜,key值包含很多空值或是異常值

這種情況可以對異常值賦一個隨機值來分散key

如:

select a.uuid,count(1)

from dw_space_dau_orc_dt a

join(

select?case?when?uuid?is?null?then?cast(rand(47)*100000as int) uuid

from dw_space_clean_orc_dt

) b?on?a.uuid=b.uuid

通過rand函數(shù)將為null的值分散到不同的值上鳄厌,在key值比較就能解決數(shù)據(jù)傾斜的問題

注:對于異常值如果不需要的話荞胡,最好是提前過濾掉,這樣計算量可以大大減少

2了嚎、當(dāng)key值都是有效值時泪漂,解決辦法為設(shè)置以下幾個參數(shù)

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

也就是每個節(jié)點的reduce 默認是處理1G大小的數(shù)據(jù),如果你的join?操作也產(chǎn)生了數(shù)據(jù)傾斜新思,那么你可以在hive 中設(shè)定

set hive.optimize.skewjoin?= true;

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

hive 在運行的時候沒有辦法判斷哪個key 會產(chǎn)生多大的傾斜窖梁,所以使用這個參數(shù)控制傾斜的閾值,如果超過這個值夹囚,新的值會發(fā)送給那些還沒有達到的reduce, 一般可以設(shè)置成你

(處理的總記錄數(shù)/reduce個數(shù))的2-4倍都可以接受.

傾斜是經(jīng)常會存在的纵刘,一般select 的層數(shù)超過2層,翻譯成執(zhí)行計劃多于3個以上的mapreduce job 都很容易產(chǎn)生傾斜荸哟,建議每次運行比較復(fù)雜的sql 之前都可以設(shè)一下這個參數(shù). 如果你不知道設(shè)置多少假哎,可以就按官方默認的1個reduce 只處理1G 的算法,那么? skew_key_threshold? = 1G/平均行長. 或者默認直接設(shè)成250000000 (差不多算平均行長4個字節(jié))

3鞍历、reduce數(shù)太少

set?mapred.reduce.tasks=800;

默認是先設(shè)置hive.exec.reducers.bytes.per.reducer這個參數(shù)舵抹,設(shè)置了后hive會自動計算reduce的個數(shù),因此兩個參數(shù)一般不同時使用

4劣砍、對于group by 產(chǎn)生傾斜的問題

set hive.map.aggr=true?(開啟map端combiner); //在Map端做combiner,假如map各條數(shù)據(jù)基本上不一樣, 聚合沒什么意義惧蛹,做combiner反而畫蛇添足,hive里也考慮的比較周到通過參數(shù)hive.groupby.mapaggr.checkinterval?=?100000 (默認)

hive.map.aggr.hash.min.reduction=0.5(默認)

兩個參數(shù)的意思是:預(yù)先取100000條數(shù)據(jù)聚合,如果聚合后的條數(shù)/100000>0.5,則不再聚合

set hive.groupby.skewindata=true刑枝;//決定groupby操作是否支持傾斜的數(shù)據(jù)香嗓。注意:只能對單個字段聚合.控制生成兩個MR Job,第一個MR Job Map的輸出結(jié)果隨機分配到reduce做次預(yù)匯總,減少某些key值條數(shù)過多某些key條數(shù)過小造成的數(shù)據(jù)傾斜問題

5、小表與大表關(guān)聯(lián)

此時装畅,可以通過mapjoin來優(yōu)化靠娱,

sethive.auto.convert.join=true;?//將小表刷入內(nèi)存中

sethive.mapjoin.smalltable.filesize?=?2500000?;//刷入內(nèi)存表的大小(字節(jié))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市掠兄,隨后出現(xiàn)的幾起案子像云,更是在濱河造成了極大的恐慌,老刑警劉巖蚂夕,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迅诬,死亡現(xiàn)場離奇詭異,居然都是意外死亡婿牍,警方通過查閱死者的電腦和手機侈贷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牍汹,“玉大人铐维,你說我怎么就攤上這事∩鞣疲” “怎么了嫁蛇?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長露该。 經(jīng)常有香客問我睬棚,道長,這世上最難降的妖魔是什么解幼? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任抑党,我火速辦了婚禮,結(jié)果婚禮上撵摆,老公的妹妹穿的比我還像新娘底靠。我一直安慰自己,他們只是感情好特铝,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布暑中。 她就那樣靜靜地躺著,像睡著了一般鲫剿。 火紅的嫁衣襯著肌膚如雪鳄逾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天灵莲,我揣著相機與錄音雕凹,去河邊找鬼。 笑死政冻,一個胖子當(dāng)著我的面吹牛枚抵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赠幕,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼俄精,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了榕堰?” 一聲冷哼從身側(cè)響起竖慧,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逆屡,沒想到半個月后圾旨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡魏蔗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年砍的,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莺治。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡廓鞠,死狀恐怖帚稠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情床佳,我是刑警寧澤滋早,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站砌们,受9級特大地震影響杆麸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜浪感,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一昔头、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧影兽,春花似錦揭斧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茧妒,卻和暖如春萧吠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桐筏。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工纸型, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梅忌。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓狰腌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親牧氮。 傳聞我的和親對象是個殘疾皇子琼腔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

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