Hive 資料傾斜原因及解決方法彙總

2021-10-24 14:21:48 字數 1140 閱讀 3503

(1)資料傾斜根本原因:由於資料分布不均勻,導致map端讀取的資料分布不均勻(資料長尾分布),從而使得map處理的資料量差異過大。

(2)解決思路:hive是分階段執行的,map處理資料量的差異取決於上乙個stage的reduce輸出,所以解決的根本方法就是如何將資料均勻的分布到各個reduce中

(3)出現資料傾斜的主要操作

(a)join:使用join時,乙個表較小,但是key值集中,使得資料在分發到各個reduce中的時候,某乙個或幾個reduce的資料遠大於平均值

(b)join:大表與大表join時,分桶的判斷欄位0值或空值太多,而這些資料都會到乙個reduce中處理,速度很慢

(c)group by:group by的維度太少,某值的數量太多(如性別***,只有男和女,group by時只有兩個維度,每個維度的資料量都很大),從而導致處理某個值資料的reduce處理非常耗時

(d)count distinct:某特殊值較多,資料將會在乙個reduce中處理,處理此特殊值的reduce耗時

(4)原因概況:

(a)key值分布不均勻

(b)資料自身問題

(c)sql語句問題

(5)資料傾斜表現:任務進度長時間維持在99%(或100%),檢視任務監控頁面,發現只有少量(1個或幾個)reduce子任務未完成。因為其處理的資料量和其他reduce差異過大。

單一reduce的記錄數與平均記錄數差異過大,通常可能達到3倍甚至更多。 最長時長遠大於平均時長。

(6)資料傾斜解決方法

(a)引數調節:hive.map.aggr = true 在map端部分聚合

(b)引數調節:hive.groupby.skewindata=true 資料傾斜時負載均衡

(c)sql語句調節:join時選擇key值分布較均勻的表作為驅動表,同時做好列裁剪和分割槽裁剪,以減少資料量

(d)sql語句調節:大小表join時,小表先進記憶體

(e)sql語句調節:大表join大表時,把key值為空的key變成乙個字串加上隨機數,把傾斜的資料分到不同的reduce上,由於null值關聯不上,因此處理後不影響最終結果

參考文獻

Hive資料傾斜及解決方法

本人部落格為日常筆記直接貼上,未整理排版,可參考相似內容的部落格。hive學習之路 十九 hive的資料傾斜 hive面試常問 hq語句 優化sort by order by distribute by 分割槽表 分桶表的區別 內部表 外部表的區別 資料傾斜 資料分布不均勻 hive底層的執行引擎 ...

Hive資料傾斜解決方法總結

資料傾斜是進行大資料計算時最經常遇到的問題之一。當我們在執行hiveql或者執行mapreduce作業時候,如果遇到一直卡在map100 reduce99 一般就是遇到了資料傾斜的問題。資料傾斜其實是進行分布式計算的時候,某些節點的計算能力比較強或者需要計算的資料比較少,早早執行完了,某些節點計算的...

Hive資料傾斜解決方法總結

資料傾斜是進行大資料計算時最經常遇到的問題之一。當我們在執行hiveql或者執行mapreduce作業時候,如果遇到一直卡在map100 reduce99 一般就是遇到了資料傾斜的問題。資料傾斜其實是進行分布式計算的時候,某些節點的計算能力比較強或者需要計算的資料比較少,早早執行完了,某些節點計算的...