一.sql規範
1、sql編寫規範
逗號放欄位前面
對用到的表都用子查詢的形式,並且只取需要用到的字段
縮排(select/from/where …and …/group by/order by/join/on…)
符號前後留空格
對一些複雜的邏輯和需要注意的點加上注釋說明
別名 同級用1、2、3...區分(如 t1、t2、t3)
2.規範的好處
規範的好處邏輯結構清晰
便於除錯
便於模組化處理
美觀,條理清楚
3.誤區
覺得耗費時間,增加工作量
覺得都一樣,自己明白就行
二.資料傾斜(spark)
1、現象
1.1 絕大多數task執行得都非常快,但個別task執行極慢。比如,總共有1000個task,997個task都在10分鐘之內執行完了,但是剩餘兩三個task卻要一兩個小時。
1.2 之前能夠正常執行的spark作業,某天突然報出oom(記憶體溢位)異常
2、原理
2.1 聚合或join等(distinct、groupby、repartition)操作產生shuffle
2.2 拉取各個節點的key到某個節點上的乙個task來處理
2.3 整個spark作業的執行進度是由執行時間最長的那個task決定的
2.4 某個task的key特別多,就產生了資料傾斜
一.sql規範
1、sql編寫規範
逗號放欄位前面
對用到的表都用子查詢的形式,並且只取需要用到的字段
縮排(select/from/where …and …/group by/order by/join/on…)
符號前後留空格
對一些複雜的邏輯和需要注意的點加上注釋說明
別名 同級用1、2、3...區分(如 t1、t2、t3)
2.規範的好處
規範的好處邏輯結構清晰
便於除錯
便於模組化處理
美觀,條理清楚
3.誤區
覺得耗費時間,增加工作量
覺得都一樣,自己明白就行
二.資料傾斜(spark)
1、現象
1.1 絕大多數task執行得都非常快,但個別task執行極慢。比如,總共有1000個task,997個task都在10分鐘之內執行完了,但是剩餘兩三個task卻要一兩個小時。
1.2 之前能夠正常執行的spark作業,某天突然報出oom(記憶體溢位)異常
2、原理
2.1 聚合或join等(distinct、groupby、repartition)操作產生shuffle
2.2 拉取各個節點的key到某個節點上的乙個task來處理
2.3 整個spark作業的執行進度是由執行時間最長的那個task決定的
2.4 某個task的key特別多,就產生了資料傾斜
3、定位
3.1 通過log定位到哪乙個task發生了資料傾斜(時間特別長,資料量特別大)
3.2 由task得知對應的是哪乙個stage
3.3 根據stage劃分原理推算出是哪一塊**(這部分**肯定有shuffle類運算元)
4、排查
4.1 分析定位到的**塊涉及到的表或資料集
4.2 檢視其中的key分布情況
5、解決
方案一:過濾少數導致傾斜的key
適用場景:導致資料傾斜的key為個別幾個,而且對計算本身的影響不大
實現原理:將導致資料傾斜的key過濾掉之後,這些key不在參與shuffle計算,就不會產生傾斜
方案優點:實現簡單,可以完全規避掉資料傾斜
方案缺點:適用場景少
方案二:提高shuffle操作的並行度
適用場景:由不少的key導致傾斜,並且這些key的資料量差異不是特別大
方案原理:spark sql 中把引數 spark.sql.shuffle.partitions的值調大(預設是200),增加task數量,讓原本分配給乙個task的多個key分配給多個task,從而讓每個task處理比原來更少的資料
方案優點:實現簡單,只需設定引數
方案缺點:無法解決某些特殊情況,比如就某乙個key對應的資料量特別大,此時無論怎麼調參,這個key還是在某乙個task中做處理
方案三:兩階段聚合(區域性聚合+全域性聚合)
使用場景:使用聚合類操作而發生傾斜時
實現原理:
【區域性聚合】先給每個key打上個1~n的隨機數,然後進行聚合
【全域性聚合】對區域性聚合的結果去掉打上隨機數的字首,再進行全域性聚合
方案優點:對於聚合類導致的資料傾斜,效果非常不錯
方案缺點:僅適用於聚合類操作,對join類的操作不適用
方案四:(取樣)隨機字首和擴容表進行join
適用場景:有(少數)大量的key導致資料傾斜
方案優點:對join型別的資料傾斜基本可以處理,效果顯著
方案缺點:需要對資料進行擴容,對記憶體資源要求較高
6、解決
嘗試不同方案
尋找更多方案
多種方案組合使用
mysql資料傾斜 Hive SQL 資料傾斜總結
在海量資料下的資料查詢中,資料傾斜是乙個很恐怖的場景。常常看似很普通的資料查詢,執行了幾個小時也沒有結果,其原因往往是發生了資料傾斜。如果真對資料傾斜採取相應的解決方法,那麼查詢效率將會大大提高。所以,分析資料傾斜是一件相當有意義的任務。本文總結不同情況下的資料傾斜,並分別給出解決方法。資料傾斜 資...
什麼是資料傾斜,怎麼解決資料傾斜?
相信很多接觸mapreduce的朋友對 資料傾斜 這四個字並不陌生,那麼究竟什麼是資料傾斜?又改怎樣解決這種該死的情況呢?何為資料傾斜?正常的資料分布理論上都是傾斜的,就是我們所說的2 8原理 80 的財富集中在20 的人手中,80 的使用者只使用20 的功能,20 的使用者貢獻了80 的訪問量,不...
資料傾斜2
如何避免因空值或者無意義的異常值引起的資料傾斜?首先檢視是否是這些值導致的傾斜,用select key,count 1 from table group by key。如果是的話,解決方法為 在on時,如下寫 on case when length a.key 符合異常條件 then concat ...