學(xué)AI,好工作 就找北大青鳥
關(guān)注小青 聽課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

數(shù)據(jù)傾斜你被問到過嗎?

來源:北大青鳥總部 2023年01月12日 11:10

摘要: 數(shù)據(jù)傾斜是真實(shí)工作中常遇見的一個(gè)問題,也是大數(shù)據(jù)面試中經(jīng)常遇到的問題,了解數(shù)據(jù)傾斜以及它產(chǎn)生的原因才能更好的對癥下藥去解決。

前段時(shí)間,小編的一些從事大數(shù)據(jù)開發(fā)的朋友在市場寒流和年終評比上敗下陣來。不過痛定思痛,為了來年招聘黃金季做準(zhǔn)備,小編的朋友們都選擇在這時(shí)去招聘市場先試試水,好針對性的準(zhǔn)備面試。通過與他們的聊天中,小編發(fā)現(xiàn),他們在面試過程中幾乎都被問到了同一個(gè)問題或關(guān)鍵詞,那就是“數(shù)據(jù)傾斜”。

小編本著獨(dú)樂樂不如眾樂樂的原則,為了同學(xué)們能夠在面試場上取得好成績,給同學(xué)們押一次題,小編今天就來好好講講前幾天補(bǔ)課學(xué)習(xí)完的“數(shù)據(jù)傾斜”到底是怎么回事兒。

什么是數(shù)據(jù)傾斜?

數(shù)據(jù)傾斜,指的是并行處理的過程中,某些分區(qū)或節(jié)點(diǎn)處理的數(shù)據(jù),顯著高于其他分區(qū)或節(jié)點(diǎn),導(dǎo)致這部分的數(shù)據(jù)處理任務(wù)比其他任務(wù)要大很多,從而成為這個(gè)階段執(zhí)行最慢的部分,進(jìn)而成為整個(gè)作業(yè)執(zhí)行的瓶頸,甚至直接導(dǎo)致作業(yè)失敗。

通俗的說,就是大量的數(shù)據(jù)計(jì)算任務(wù)被分配到了一個(gè)節(jié)點(diǎn)上,造成“一個(gè)人說忙死了,其他人說閑著沒事兒干”的場景。

數(shù)據(jù)傾斜是如何表現(xiàn)出來的?

當(dāng)我們看任務(wù)進(jìn)度長時(shí)間維持在99%,有一個(gè)或者幾個(gè)reduce節(jié)點(diǎn)運(yùn)行很慢,導(dǎo)致整個(gè)作業(yè)的處理時(shí)間很長,reduce進(jìn)度停留在某個(gè)值,有時(shí)百分比甚至?xí)赝?,最終導(dǎo)致作業(yè)失敗的這種情況,大概率是出現(xiàn)了數(shù)據(jù)傾斜。

數(shù)據(jù)傾斜產(chǎn)生的原因?

俗話說,解鈴還須系鈴人,我們首先需要知道數(shù)據(jù)傾斜是如何產(chǎn)生的,才好最終對癥下藥,最終解決這個(gè)棘手問題。

產(chǎn)生數(shù)據(jù)傾斜的原因較多較雜,比較常見的有shuffle過程導(dǎo)致的,還有過濾時(shí)導(dǎo)致的。例如在處理數(shù)據(jù)時(shí),當(dāng)數(shù)據(jù)某一個(gè)key值過多時(shí),在進(jìn)行join或groupby操作時(shí)容易導(dǎo)致數(shù)據(jù)傾斜。還如,有些場景下,數(shù)據(jù)原本是均衡的,但是由于進(jìn)行了一系列的數(shù)據(jù)剔除操作,可能在過濾掉大量數(shù)據(jù)后,造成數(shù)據(jù)的傾斜。

數(shù)據(jù)傾斜發(fā)生后如何優(yōu)化解決?

拿Hive優(yōu)化數(shù)據(jù)傾斜來說,在不同的情形下可以有不同的解決辦法。

1. 通常情況下產(chǎn)生數(shù)據(jù)傾斜可以考慮的方法

  • 了解數(shù)據(jù)分布,尋找分布更加均勻的字段作為key值

  • 增加節(jié)點(diǎn)JVM內(nèi)存,起碼遇到數(shù)據(jù)傾斜時(shí),不至于程序崩潰

  • 對key值“加鹽”,有一種方案是在map階段時(shí)給key加上一個(gè)隨機(jī)數(shù),有了隨機(jī)數(shù)的key就不會被大量的分配到同一節(jié)點(diǎn)(小幾率),待到reduce后再把隨機(jī)數(shù)去掉即可。

2. 當(dāng)使用groupby產(chǎn)生數(shù)據(jù)傾斜時(shí)

  • 設(shè)置map端聚合,hive.map.aggr=true。它減輕了map端向reduce端發(fā)送的數(shù)據(jù)量,也就是減輕了數(shù)據(jù)I/O

  • 設(shè)置負(fù)載均衡,hive.groupby.skewindata=true,它會讓整個(gè)MR任務(wù)變成兩個(gè)任務(wù),第一個(gè)任務(wù)中,Map 的輸出結(jié)果集合會隨機(jī)分布到 Reduce 中,每個(gè) Reduce 做部分聚合操作,并輸出結(jié)果,這樣處理的結(jié)果是相同的 Group By Key 有可能被分發(fā)到不同的 Reduce 中,從而達(dá)到負(fù)載均衡的目的。第二個(gè) MR Job 再根據(jù)預(yù)處理的數(shù)據(jù)結(jié)果按照 Group By Key 分布到 Reduce 中,最后完成最終的聚合操作。

3. 當(dāng)使用Join產(chǎn)生數(shù)據(jù)傾斜時(shí)

  • 選用join key分布最均勻的表作為驅(qū)動表

  • 小表join大表時(shí),使用map join操作


總結(jié)一下,數(shù)據(jù)傾斜是真實(shí)工作中常遇見的一個(gè)問題,也是大數(shù)據(jù)面試中經(jīng)常遇到的問題,了解數(shù)據(jù)傾斜以及它產(chǎn)生的原因才能更好的對癥下藥去解決。在實(shí)際工作中往往需要對所遇見的場景進(jìn)行具體的分析,找出解決對策。以上介紹的解決對策足以解決80%Hive數(shù)據(jù)傾斜的問題啦。


標(biāo)簽: hive
熱門班型時(shí)間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計(jì)全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開發(fā)全能班 爆滿開班
網(wǎng)絡(luò)安全運(yùn)營班 爆滿開班
報(bào)名優(yōu)惠
免費(fèi)試聽
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門話題 站內(nèi)鏈接