sparkSQL數據傾斜,通過兩步計算徹底解決數據傾斜

前言:業務場景,單個用戶的數據量,佔總數據量的30%-40%,使用sparkSQL工具進行統計分析;Group By分組聚合,求PV,UV等出現嚴重數據傾斜;

解決思路:加鹽打散,將大Key散列;

解析:加鹽是散列大key,最爲常用的方式,這一點想必大家都能想到;加鹽的方式也很多,像加隨機數,加Hash值等;但是加鹽容易,“消鹽”難;尤其是我們使用sparkSQL作爲工具時,由於SQL的侷限性,加鹽和“消鹽”的難度更大;不過在SQL中加鹽通常不是加隨機數,或者加Hash值來處理;而是要加“維度”,在Group By 分組條件中添加散列度更高的維度(如:user_id,session等);

兩步操作:1)添加維度count       2)降維度SUM

具體例子:目的是計算UV;分組的條件是ak,由於個別ak的數據超過總數據量 的30%。因此導致數據傾斜;此時我們分兩步進行計算,第一步COUNT,第二步SUM;關鍵是在第一步加入了散列程度更高的字段uu;

一步操作導致數據傾斜:上面用兩步計算得到UV,下面用一步計算得到UV,但是一步計算會導致嚴重的數據傾斜;

總結:sparkSQL解決數據傾斜的關鍵是兩步計算的思想;同時要根據業務特性,找到一個合適維度進行加鹽;

如果對該博客仍有不理解的地方;可以添加我的微信,進一步溝通討論;

此時此刻,還有一個事情我不得不說了;

樓主本人家中自產蜂蜜,純天然;

爺爺,老爹時代養蜂,而今我輩養蜂技術盡然荒廢,唯有編碼餬口;

老爹在家養蜂不易,一波廣告還望見諒!

對蜂蜜若有興趣,也可諮詢;本人微信號:zfw1307

小弟在大數據實時分析,和數據傾斜優化等方面積累了一些經驗;如果興趣一起溝通學習;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章