Hive調(diào)優(yōu) | Hive常見數(shù)據(jù)傾斜及調(diào)優(yōu)技巧

Hive在執(zhí)行MapReduce任務(wù)時經(jīng)常會碰到數(shù)據(jù)傾斜的問題涡扼,表現(xiàn)為一個或者幾個reduce節(jié)點運行很慢呻此,延長了整個任務(wù)完成的時間事扭,這是由于某些key的條數(shù)比其他key多很多虏束,這些Key所在的reduce節(jié)點所處理的數(shù)據(jù)量比其他節(jié)點就大很多啤斗,從而導(dǎo)致某幾個節(jié)點遲遲運行不完表箭。

那么經(jīng)常有哪些情況會產(chǎn)生數(shù)據(jù)傾斜呢,又該如何解決钮莲,這里梳理了幾種最常見的數(shù)據(jù)傾斜場景免钻。

一、小表與大表JOIN

小表與大表Join時容易發(fā)生數(shù)據(jù)傾斜臂痕,表現(xiàn)為小表的數(shù)據(jù)量比較少但key卻比較集中伯襟,導(dǎo)致分發(fā)到某一個或幾個reduce上的數(shù)據(jù)比其他reduce多很多,造成數(shù)據(jù)傾斜握童。

優(yōu)化方法:使用Map Join將小表裝入內(nèi)存,在map端完成join操作叛赚,這樣就避免了reduce操作澡绩。有兩種方法可以執(zhí)行Map Join:

(1) 通過hint指定小表做MapJoin

select  /*+ MAPJOIN(time_dim) */ count(*)  from store_sales join time_dim on ss_sold_time_sk = t_time_sk;

(2) 通過配置參數(shù)自動做MapJoin

核心參數(shù):

參數(shù)名稱 默認(rèn)值 說明
hive.auto.convert.join false 是否將common join(reduce端join)轉(zhuǎn)換成map join
hive.mapjoin.smalltable.filesize 25000000 判斷為小表的輸入文件大小閾值,默認(rèn)25M

因此俺附,巧用MapJoin可以有效解決小表關(guān)聯(lián)大表場景下的數(shù)據(jù)傾斜肥卡。

二、大表與大表JOIN

大表與大表Join時事镣,當(dāng)其中一張表的NULL值(或其他值)比較多時步鉴,容易導(dǎo)致這些相同值在reduce階段集中在某一個或幾個reduce上,發(fā)生數(shù)據(jù)傾斜問題璃哟。

優(yōu)化方法:

(1) 將NULL值提取出來最后合并氛琢,這一部分只有map操作;非NULL值的數(shù)據(jù)分散到不同reduce上随闪,不會出現(xiàn)某個reduce任務(wù)數(shù)據(jù)加工時間過長的情況阳似,整體效率提升明顯。這種方法由于有兩次Table Scan會導(dǎo)致map增多铐伴。

SELECT a.user_Id,a. username,b.customer_id
FROM user_info a
LEFT JOIN customer_info b
ON a.user_id = b.user_id
where a.user_id IS NOT NULL

UNION ALL

SELECT a.user_Id,a.username,NULL
FROM user_info a
WHERE a.user_id IS NULL

(2) 在Join時直接把NULL值打散成隨機值來作為reduce的key值撮奏,不會出現(xiàn)某個reduce任務(wù)數(shù)據(jù)加工時間過長的情況,整體效率提升明顯当宴。這種方法解釋計劃只有一次map畜吊,效率一般優(yōu)于第一種方法。


SELECT a.user_id,a.username,b.customer_id
FROM user_info a
LEFT JOIN customer_info b
ON
CASE WHEN
a.user_id IS NULL
THEN
CONCAT ('dp_hive', RAND())
ELSE
a.user_id
END  = b.user_id;

三户矢、GROUP BY 操作

Hive做group by查詢玲献,當(dāng)遇到group by字段的某些值特別多的時候,會將相同值拉到同一個reduce任務(wù)進行聚合,也容易發(fā)生數(shù)據(jù)傾斜青自。

優(yōu)化方法:

(1) 開啟Map端聚合

參數(shù)設(shè)置:

參數(shù)名稱 默認(rèn)值 說明
hive.map.aggr true(Hive 0.3+) 是否開啟Map端聚合
hive.groupby.mapaggr.checkinterval 100000 在Map端進行聚合操作的條目數(shù)目

(2) 有數(shù)據(jù)傾斜時進行負載均衡

參數(shù)設(shè)置:

參數(shù)名稱 默認(rèn)值 說明
hive.groupby.skewindata false 當(dāng)GROUP BY有數(shù)據(jù)傾斜時是否進行負載均衡

當(dāng)設(shè)定hive.groupby.skewindata為true時株依,生成的查詢計劃會有兩個MapReduce任務(wù)。在第一個MapReduce 中延窜,map的輸出結(jié)果集合會隨機分布到 reduce 中恋腕, 每個 reduce 做部分聚合操作,這樣處理之后逆瑞,相同的 Group By Key 有可能分發(fā)到不同的 reduce 中荠藤,從而達到負載均衡的目的。在第二個 MapReduce 任務(wù)再根據(jù)第一步中處理的數(shù)據(jù)按照Group By Key分布到reduce中获高,(這一步中相同的key在同一個reduce中)哈肖,最終生成聚合操作結(jié)果。

四念秧、COUNT(DISTINCT) 操作

當(dāng)在數(shù)據(jù)量比較大的情況下淤井,由于COUNT DISTINCT操作是用一個reduce任務(wù)來完成,這一個reduce需要處理的數(shù)據(jù)量太大摊趾,就會導(dǎo)致整個job很難完成币狠,這也可以歸納為一種數(shù)據(jù)傾斜。

優(yōu)化方法:將COUNT DISTINCT使用先GROUP BY再COUNT的方式替換砾层。例如:

select count(id)  from  (select id from bigtable group  by id) a

因此漩绵,count distinct的優(yōu)化本質(zhì)上也是轉(zhuǎn)成group by操作。

往期推薦:

視頻 | 58同城HBase平臺及生態(tài)建設(shè)實踐

如何快速全面掌握Kafka肛炮?5000字吐血整理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末止吐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子侨糟,更是在濱河造成了極大的恐慌碍扔,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粟害,死亡現(xiàn)場離奇詭異蕴忆,居然都是意外死亡,警方通過查閱死者的電腦和手機悲幅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門套鹅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人汰具,你說我怎么就攤上這事卓鹿。” “怎么了留荔?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵吟孙,是天一觀的道長澜倦。 經(jīng)常有香客問我,道長杰妓,這世上最難降的妖魔是什么藻治? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮巷挥,結(jié)果婚禮上桩卵,老公的妹妹穿的比我還像新娘。我一直安慰自己倍宾,他們只是感情好雏节,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著高职,像睡著了一般钩乍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怔锌,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天寥粹,我揣著相機與錄音,去河邊找鬼埃元。 笑死排作,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的亚情。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼哈雏,長吁一口氣:“原來是場噩夢啊……” “哼楞件!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起裳瘪,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤土浸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后彭羹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黄伊,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年派殷,在試婚紗的時候發(fā)現(xiàn)自己被綠了还最。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡毡惜,死狀恐怖拓轻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情经伙,我是刑警寧澤扶叉,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站枣氧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏张弛。R本人自食惡果不足惜宗挥,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一契耿、第九天 我趴在偏房一處隱蔽的房頂上張望搪桂。 院中可真熱鬧,春花似錦酗电、人聲如沸内列。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽划滋。三九已至埃篓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間同窘,已是汗流浹背胶征。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工睛低, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吹零。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓灿椅,卻偏偏與公主長得像钞支,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子婴洼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

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