hive數(shù)據(jù)傾斜原因解決方法

Hive傾斜之group by聚合傾斜

原因:

  • 分組的維度過少悠夯,每個維度的值過多侠草,導致處理某值的reduce耗時很久翰撑;

  • 對一些類型統(tǒng)計的時候某種類型的數(shù)據(jù)量特別多,其他的數(shù)據(jù)類型特別少匠题。當按照類型進行g(shù)roup by的時候尽超,會將相同的group by字段的reduce任務需要的數(shù)據(jù)拉取到同一個節(jié)點進行聚合,而當其中每一組的數(shù)據(jù)量過大時梧躺,會出現(xiàn)其他組的計算已經(jīng)完成而這個reduce還沒有計算完成,其他的節(jié)點一直等待這個節(jié)點的任務執(zhí)行完成傲绣,所以會一直看到map 100% reduce99%的情況掠哥;

解決方法:

  • set hive.map.aggr=true;

  • set hive.groupby.skewindata=true;

原理:

  • hive.map.aggr=true 這個配置代表開啟map端聚合;

  • hive.groupby.skewindata=true秃诵,當選項設定為true续搀,生成的查詢計劃會有兩個MR Job。當?shù)谝粋€MR Job中菠净,Map的輸出結(jié)果結(jié)合會隨機分布到Reduce中禁舷,每個Reduce做部分聚合操作,并輸出結(jié)果毅往。這樣處理的結(jié)果是相同的Group By Key有可能被分發(fā)到不同的Reduce中牵咙,從而達到負載均衡的目的。第二個MR Job再根據(jù)預處理的數(shù)據(jù)結(jié)果按照Group By Key分布到reduce中攀唯,這個過程可以保證相同的key被分到同一個reduce中洁桌,最后完成最終的聚合操作;

Hive傾斜之Map和Reduce優(yōu)化

  1. 原因:當出現(xiàn)小文件過多,需要合并小文件侯嘀×砹瑁可以通過set hive.merge.mapredfiles=true來解決谱轨;
  2. 原因:輸入數(shù)據(jù)存在大塊和小塊的嚴重問題,比如 說:一個大文件128M吠谢,還有1000個小文件土童,每 個1KB。 解決方法:任務輸入前做文件合并工坊,將眾多小文件合并成一個大文件献汗。通過set hive.merge.mapredfiles=true解決;
  3. 原因:單個文件大小稍稍大于配置的block塊的大小栅组,此時需要適當增加map的個數(shù)雀瓢。解決方法:set mapred.map.tasks的個數(shù);
  4. 原因:文件大小適中玉掸,但是map端計算量非常大刃麸,如:select id,count(*),sum(case when...),sum(case when ...)...需要增加map個數(shù)。解決方法:set mapred.map.tasks個數(shù)司浪,set mapred.reduce.tasks個數(shù)泊业;

Hive傾斜之HQL中包含count(distinct)時

  • 如果數(shù)據(jù)量非常大,執(zhí)行如select a,count(distinct b) from t group by a;類型的sql時啊易,會出現(xiàn)數(shù)據(jù)傾斜的問題吁伺。

  • 解決方法:使用sum...group by代替。如:select a,sum(1) from(select a,b from t group by a,b) group by a;

Hive傾斜之HQL中join優(yōu)化

當遇到一個大表和一個小表進行join操作時租谈。使用mapjoin將小表加載到內(nèi)存中篮奄。如:select /*+ MAPJOIN(a) */ a.c1, b.c1 ,b.c2 from a join b where a.c1 = b.c1;
遇到需要進行join,但是關聯(lián)字段有數(shù)據(jù)為null割去,如表一的id需要和表二的id進行關聯(lián)窟却;
解決方法1:id為null的不參與關聯(lián)
比如:

select * from log a 
 join users b 
on a.id is not null and a.id = b.id 
union all 
select * from log a 
where a.id is null;

解決方法2: 給null值分配隨機的key值
比如:

select * from log a 
left outer join users b 
on 
case when a.user_id is null 
then concat(‘hive’,rand() ) 
else a.user_id end = b.user_id; 

合理設置Map數(shù)

  1. 通常情況下,作業(yè)會通過input的目錄產(chǎn)生一個或者多個map任務呻逆。
    主要的決定因素有:input的文件總個數(shù)夸赫,input的文件大小,集群設置的文件塊大小咖城。
  2. 是不是map數(shù)越多越好茬腿?
    答案是否定的。如果一個任務有很多小文件(遠遠小于塊大小128m)宜雀,則每個小文件也會被當做一個塊切平,用一個map任務來完成,而一個map任務啟動和初始化的時間遠遠大于邏輯處理的時間州袒,就會造成很大的資源浪費揭绑。而且,同時可執(zhí)行的map數(shù)是受限的。
  3. 是不是保證每個map處理接近128m的文件塊他匪,就高枕無憂了菇存?
    答案也是不一定。比如有一個127m的文件邦蜜,正常會用一個map去完成依鸥,但這個文件只有一個或者兩個小字段,卻有幾千萬的記錄悼沈,如果map處理的邏輯比較復雜贱迟,用一個map任務去做,肯定也比較耗時絮供。
    針對上面的問題2和3衣吠,我們需要采取兩種方式來解決:即減少map數(shù)和增加map數(shù);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末壤靶,一起剝皮案震驚了整個濱河市缚俏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贮乳,老刑警劉巖忧换,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異向拆,居然都是意外死亡亚茬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門浓恳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刹缝,“玉大人,你說我怎么就攤上這事颈将≡薏荩” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵吆鹤,是天一觀的道長。 經(jīng)常有香客問我洲守,道長疑务,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任梗醇,我火速辦了婚禮知允,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叙谨。我一直安慰自己温鸽,他們只是感情好,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涤垫,像睡著了一般姑尺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蝠猬,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天切蟋,我揣著相機與錄音,去河邊找鬼榆芦。 笑死柄粹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的匆绣。 我是一名探鬼主播驻右,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼崎淳!你這毒婦竟也來了堪夭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤凯力,失蹤者是張志新(化名)和其女友劉穎茵瘾,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咐鹤,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡拗秘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了祈惶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雕旨。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖捧请,靈堂內(nèi)的尸體忽然破棺而出凡涩,到底是詐尸還是另有隱情,我是刑警寧澤疹蛉,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布活箕,位于F島的核電站,受9級特大地震影響可款,放射性物質(zhì)發(fā)生泄漏育韩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一闺鲸、第九天 我趴在偏房一處隱蔽的房頂上張望筋讨。 院中可真熱鬧,春花似錦摸恍、人聲如沸悉罕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壁袄。三九已至类早,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間然想,已是汗流浹背莺奔。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留变泄,地道東北人令哟。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像妨蛹,于是被迫代替她去往敵國和親屏富。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

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