Hive解決資料傾斜問題

2021-09-04 08:03:04 字數 1340 閱讀 1529

簡單來說資料傾斜就是資料的key 的分化嚴重不均,造成一部分資料很多,一部分資料很少的局面。

舉個 word count 的入門例子,它的map 階段就是形成 (「aaa」,1)的形式,然後在reduce 階段進行 value 相加,得出 「aaa」 出現的次數。若進行 word count 的文字有100g,其中 80g 全部是 「aaa」 剩下 20g 是其餘單詞,那就會形成 80g 的資料量交給乙個 reduce 進行相加,其餘 20g 根據 key 不同分散到不同 reduce 進行相加的情況。如此就造成了資料傾斜,臨床反應就是 reduce 跑到 99%然後一直在原地等著 那80g 的reduce 跑完。

從另外角度看資料傾斜,其本質還是在單台節點在執行那一部分資料reduce任務的時候,由於資料量大,跑不動,造成任務卡住。若是這台節點機器記憶體夠大,cpu、網路等資源充足,跑 80g 左右的資料量和跑10m 資料量所耗時間不是很大差距,那麼也就不存在問題,傾斜就傾斜吧,反正機器跑的動。所以機器配置和資料量存在乙個合理的比例,一旦資料量遠超機器的極限,那麼不管每個key的資料如何分布,總會有乙個key的資料量超出機器的能力,造成 reduce 緩慢甚至卡頓。

業務邏輯造成的資料傾斜會多很多,日常使用過程中,容易造成資料傾斜的原因可以歸納為幾點:

1)group by

2)distinct count(distinct xx)

3)join

1、調優引數

set hive.groupby.skewindata=true;

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已經有了很大的改善,因此基本解決資料傾斜。

Hive解決資料傾斜問題

什麼是資料傾斜以及資料傾斜式怎麼產生的?簡單來說資料傾斜就是資料的key的分化嚴重不均,造成一部資料很多,一部分資料很少的局面。舉個 word count 的入門例子,它的map 階段就是形成 aaa 1 的形式,然後在reduce 階段進行 value 相加,得出 aaa 出現的次數。若進行 wo...

解決hive中資料傾斜問題

平常工作中我們在使用hive處理業務問題的時候不可避免的會遇到資料傾斜的問題,資料傾斜的本質就是key的分布不均勻,導致分到不同reduce上的資料量差距或大或小,當資料量差距過大的時候就造成了資料傾斜,使得某乙個reduce的負擔過大,導致任務遲遲不能完成。1.key分布不均勻。2.map端資料傾...

Hive資料傾斜解決

什麼是資料傾斜?簡單來說資料傾斜就是資料的key的分化嚴重不均,造成一部分資料很多,一部分資料很少的局面。資料傾斜產生的原因是什麼?舉個 word count 的入門例子,它的map 階段就是形成 aaa 1 的形式,然後在reduce 階段進 行 value 相加,得出 aaa 出現的次數。若進行...