hive優化資料傾斜的解決方法

2021-06-28 21:58:45 字數 2381 閱讀 7295

**:

發生資料傾斜

時,通常的

現象是: 資料

傾斜一般是由於**中的

join

或group by

或distinct

的key

分布不均

導致的,大量

經驗表明資料

傾斜的原因是人

為的建表疏忽或

業務可以

規避的。如果確

認業務需要

這樣傾斜的邏輯.

select /*+mapjoin(b)*/ * from a join b on a.id =b.id

將會把join

轉換為mapjoin

,且將b表作為

小表處理。

一、隨機函式解決傾斜

原始sql:

insertoverwrite table t_aa_click_log partition (pt=』$』)

selecta.*

from(select * from t_aa_click_log1

wherept=』$』

)aleftouter join

(select* from t_aa_pv_info_log

wherept=』$』) b

ona.pvid=b.pvid;

發現大量時間花費在reduce99%~100%這最後一步上,約佔總時長20分鐘的一半,

用以下sql檢查下資料分布:

select*

from(

selectpvid,count(1) cnt

fromt_aa_click_log1

wherept=』$』

groupby pvid) t

orderby cnt desc

limit50;

發現pvid=』na』的佔比最高,有100多萬,而其他最多的也只有幾十條,證實資料傾斜。

利用隨機函式,將pvid=』na』的資料隨機分布到不同的reduce中:

insertoverwrite table t_aa_click_log partition (pt=』$』)

selecta.*

from(select * from t_aa_click_log1

wherept=』$』

)aleftouter join

(select* from t_aa_pv_info_log

wherept=』$』) b

–如果pvid長度<=2,包含pvid=na或-1 等多種異常值,即用隨機函式疊加處理,因為異常值本來就關聯不到,所以加上隨機函式對結果沒有影響

oncase when length(a.pvid)<=2 then concat(a.pvid,rand()) else a.pvid end =b.pvid;

問題解決。

二、mapjoin 結合 unionall

原始sql:

from

(select * from t_aa_pvid_ctr_hour_js_mes1

) aleft outer join

(select * fromt_qd_cmfu_book_info_mes

) c速度很慢,老辦法,先查下資料分布。

select *

from

fromt_aa_pvid_ctr_hour_js_mes1

order by cnt desc

limit 50;

資料分布如下:

na617370129 2

118293314 1

40673814 d

20151236 b

1846306 s

1124246 5

675240 8

642231 6

611104 t

596973 4

579473 3

489516 7

475999 9

373395

107580

10508

解決方案:

(select * fromt_aa_pvid_ctr_hour_js_mes1

) aleft outer join

(select * fromt_qd_cmfu_book_info_mes

where cast(book_id asint)>9) c

union all

select /*+ mapjoin(c)*/

(select * fromt_aa_pvid_ctr_hour_js_mes1

left outer join

(select * fromt_qd_cmfu_book_info_mes

where cast(book_id asint)<=9) c

all 放到一起。

Hive資料傾斜解決方法總結

資料傾斜是進行大資料計算時最經常遇到的問題之一。當我們在執行hiveql或者執行mapreduce作業時候,如果遇到一直卡在map100 reduce99 一般就是遇到了資料傾斜的問題。資料傾斜其實是進行分布式計算的時候,某些節點的計算能力比較強或者需要計算的資料比較少,早早執行完了,某些節點計算的...

Hive資料傾斜解決方法總結

資料傾斜是進行大資料計算時最經常遇到的問題之一。當我們在執行hiveql或者執行mapreduce作業時候,如果遇到一直卡在map100 reduce99 一般就是遇到了資料傾斜的問題。資料傾斜其實是進行分布式計算的時候,某些節點的計算能力比較強或者需要計算的資料比較少,早早執行完了,某些節點計算的...

Hive資料傾斜解決方法總結

資料傾斜是進行大資料計算時最經常遇到的問題之一。當我們在執行hiveql或者執行mapreduce作業時候,如果遇到一直卡在map100 reduce99 一般就是遇到了資料傾斜的問題。資料傾斜其實是進行分布式計算的時候,某些節點的計算能力比較強或者需要計算的資料比較少,早早執行完了,某些節點計算的...