spark資料傾斜的乙個小case

2021-10-11 21:03:12 字數 1993 閱讀 8883

sparksql 在執行複雜資料查詢的時候很容易出現一些資料傾斜情況如下圖,開啟spark ui 發現最慢的stage29 其中乙個task 巨慢,即使設定了較多的資源依然執行時間超過了60min,通常情況下我們在不看這些資料的情況下本能的調大spark shuffle的並行度,但也不是百試百靈的,對於資料本身沒有傾斜,而task處理資料不均的,使用此種方法是很有效果的。

但是我們這裡討論的是資料本身存在的傾斜問題,該如何去定位分析呢?

以下是ui 的部分截圖,顯示其中乙個task拖慢了整個任務的進度,最後由於executor記憶體爆掉而被yarn無奈乾掉,諸如容器被標記失敗,退出**143等。

當新增資源沒喲效果的時候,可以明顯想到勢必是資料傾斜了,如下對於某個關聯的字段發現null值驚人的達到4千多萬,如下:

select first_les_sel_id,count(1) from tmp.tmp_stu***_20201209 group by first_les_sel_id order by count(1) desc limit 10;

first_les_sel_id count(1)

null 45506549

50245 10808

36840 10496

55592 9815

31346 9782

51114 9765

60825 9712

55693 9474

64798 9348

61695 9325

這類問題既然找到了很好解決:

1、過濾無意義的null值

2、雖為null值但是無法過濾,那就只能採用隨機打散策略了

過濾很簡單,且不說,如何隨機打散呢?

---參考

select t1.first_les_sel_id,t6.sel_id

from tmp.tmp_sf_20201209 as t1

left join

(select

sel_id,

sel_name,

sel_employee_id,

sel_entry_time,

sel_resigned_time,

sel_identity,

sel_team,

sel_team_region,

sel_district,

if(sel_is_new > 0 ,'新人','老人') as sel_is_new,

case sel_grade when 0 then 's'

when 1 then 'aaa'

when 2 then 'aa'

when 3 then 'a'

when 4 then 'b'

when 5 then 'c'

when 6 then 'd'

else sel_grade end as sel_grade,

belong_date

from

dim.dim_sr_info_history_df

where

pt = '2020-12-09'

) as t6

on case when t1.first_les_sel_id is null then concat ('0000',substr(rand()*100,1,2)) else t1.first_les_sel_id end = t6.sel_id

你可以如上所示進行打散, 這使得原執行時間從80分鐘+ 直接降到9分鐘跑完,效果還是很明顯的。對於spark來說,不怕資料多就怕資料傾斜。

除上面這種寫法之外還有乙個切實可行的辦法,在所選擇的列中新增冗餘列,你可以使用colease函式去處理null,盡可能雜湊開就完美了

參考:如有幫到你,不妨點個?,thanks♪(・ω・)ノ 

Spark優化總結(一) 資料傾斜

舉例 hive分桶導致的資料傾斜 舉例 kafka分割槽導致的資料傾斜 舉例 hive分桶 kafka分割槽 舉例 分布式mpp架構資料庫 另外,即便不是分布式資料庫,如果你的資料庫只有乙個節點可用,同樣會造成該問題 舉例 hbase的rowkey設計錯誤 簡約示意圖 資料原狀態 node1 nod...

解決 spark 中的資料傾斜問題

發現資料傾斜的時候,不要急於提高 executor 的資源,修改引數 或是修改程式,首先要檢查資料本身,是否存在異常資料。1 資料問題造成的資料傾斜 找出異常的 key 如果任務長時間卡在最後最後 1 個 幾個 任務,首先要對 key 進行 抽樣分析,判斷是哪些 key 造成的。選取 key,對資料...

解決spark中遇到的資料傾斜問題

多數task執行速度較快,少數task執行時間非常長,或者等待很長時間後提示你記憶體不足,執行失敗。常見於各種shuffle操作,例如reducebykey,groupbykey,join等操作。key本身分布不均勻 包括大量的key為空 key的設定不合理 shuffle時的併發度不夠 計算方式有...