有這樣乙個rdd1
(a,1),(a,2),(a,3),(b,1),(c,1)
這樣乙個rdd2
(a,100),(b,90),(c,60)
將這兩個rddjoin的時候:
(a,(1,100)),(a,(2,100)),(a,(3,100)),(b,(1,90)),(c,(1,60))
發生資料傾斜,怎麼解決這個場景下的資料傾斜:
這個解決方案一定要牢牢記著,只要面試官不low一定會問你
可以先把rdd1進行拆分:
將導致資料傾斜的key分到乙個rdd,資料比較均勻的key分到另外乙個rdd
把rdd1拆成兩個rdd:
rdd1_1:(a,1),(a,2),(a,3)
rdd1_2:(b,1),(c,1)
同時還要把rdd2進行拆分:
rdd2_1:(a,100)
rdd2_2:(b,90),(c,60)
第乙個疑慮:怎麼知道哪個key的資料量比較大會導致資料傾斜
可以採用抽樣,抽樣完之後做乙個wordcount,抽樣也有對應的運算元sample
看一下哪個key對應的資料比較多,就把這些key所對應的資料拆到乙個rdd中去
第二個疑慮:怎麼把乙個rdd拆成兩個rdd?
**怎麼寫,進行兩次filter,就可以得到兩個rdd
拆完之後接下來怎麼做?
分完之後要對這兩個rdd進行處理,key加上隨機字首,隨機!!字首
比如我加上的是ramdom(2)要麼是0要麼是1
這時候資料就變了:
rdd1_1:(a_0,1),(a,2),(a,3)
rdd1_2:(b,1),(c,1)
資料傾斜問題
一 資料傾斜的原因 核心原因是reduce段資料分布不均勻,導致少量reduce子任務未完成 二 解決方案 2.1調節引數hive.map.aggr true 在map端部分聚合,相當於combiner hive.groupby.skewindata true 資料傾斜的時候進行負載均衡,當選項設定...
大資料 「資料傾斜」的問題
解決資料傾斜的辦法,前輩已經寫得非常完整了,我這裡就直接搬磚吧 建議先看這個鏈結文章,非常好 下面是自己的總結 什麼是資料傾斜?見下圖 簡單來說資料傾斜就是資料的key 的分化嚴重不均,造成一部分資料很多,一部分資料很少的局面。舉個 word count 的入門例子 它的map 階段就是形成 aaa...
spark資料傾斜問題
資料傾斜 加更大記憶體 跟cpu硬體是效能優化的根本之道 一 資料傾斜帶來的致命性後果 1.oom 根本原因資料太多 一般oom都是由於資料傾斜所致,spark基於jvm之上的 2.速度非常慢 二 資料傾斜的基本特徵 1.任務分配不均勻 2.個別task處理過度大量的資料 shuffle過程中遇到同...