關於資料傾斜的知識學習

2021-12-30 12:23:39 字數 1178 閱讀 9430

分組 注:group by 優於distinct group

情形:group by 維度過小,某值的數量過多

後果:處理某值的reduce非常耗時

去重 distinct count(distinct xx)

情形:某特殊值過多

後果:處理此特殊值的reduce耗時

連線 join

情形1:其中乙個表較小,但是key集中

後果1:分發到某乙個或幾個reduce上的資料遠高於平均值

情形2:大表與大表,但是分桶的判斷欄位0值或空值過多

後果2:這些空值都由乙個reduce處理,非常慢

hive.map.aggr=true:在map中會做部分聚集操作,效率更高但需要更多的記憶體。

hive.groupby.skewindata=true:資料傾斜時負載均衡,當選項設定為true,生成的查詢計畫會有兩個mrjob。第乙個mrjob 中,map的輸出結果集合會隨機分布到reduce中,每個reduce做部分聚合操作,並輸出結果,這樣處理的結果是相同的groupby key有可能被分發到不同的reduce中,從而達到負載均衡的目的;第二個mrjob再根據預處理的資料結果按照groupby key分布到reduce中(這個過程可以保證相同的groupby key被分布到同乙個reduce中),最後完成最終的聚合操作。

由上面可以看出起到至關重要的作用的其實是第二個引數的設定,它使計算變成了兩個mapreduce,先在第乙個中在 shuffle 過程 partition 時隨機給 key 打標記,使每個key 隨機均勻分布到各個 reduce 上計算,但是這樣只能完成部分計算,因為相同key沒有分配到相同reduce上,所以需要第二次的mapreduce,這次就回歸正常 shuffle,但是資料分布不均勻的問題在第一次mapreduce已經有了很大的改善,因此基本解決資料傾斜。

2、在 key 上面做文章,在 map 階段將造成傾斜的key 先分成多組,例如 aaa 這個 key,map 時隨機在 aaa 後面加上 1,2,3,4 這四個數字之一,把 key 先分成四組,先進行一次運算,之後再恢復 key 進行最終運算。

3、能先進行 group 操作的時候先進行 group 操作,把 key 先進行一次 reduce,之後再進行 count 或者 distinct count 操作。

4、join 操作中,使用 map join 在 map 端就先進行 join ,免得到reduce 時卡住。

資料傾斜知識小結

原因 大部分是因key分布不均勻,也有map端或reduce端傾斜或因資料本身特徵問題,只要涉及key的操作都可能出現傾斜。容易出現的情況 a.group by不搭配聚合函式使用 b.count distinct 資料量大時,因為此操作是根據group by分組按distinct欄位排序的 c.小表...

spark關於資料傾斜問題

spark的資料傾斜調優方案歸納總結 不來虛的,直接上解決方法。資料傾斜產生原因 在運算過程中把資料分配給不同的task,一般需要shuffle過程,同乙個key都會交給task處理,但是有時同乙個key的values資料量太多造成資料堆積等。判斷是否發生資料傾斜 通過web ui檢視task的me...

大資料學習 資料傾斜

2017 10 23 細柳條小秀才翻譯鋪 前言 資料傾斜是日常大資料查詢中 的乙個bug,遇不到它時你覺得資料傾斜也就是書本部落格上的乙個無病呻吟的偶然案例,但當你遇到它是你就會懊悔當初怎麼不多了解一下這個赫赫有名的事故。當然你和資料傾斜的緣分深淺還是看你公司的業務邏輯和資料量有沒有步入資料傾斜的領...