Hive數據傾斜及解決方案

1.現象

      數據傾斜是進行大數據計算時最經常遇到的問題之一。當我們在執行hiveql或者運行mapreduce作業時候,如果遇到一直卡在map100%,reduce99%,查看任務監控頁面,發現只有少量(1個或幾個)reduce子任務未完成。因爲其處理的數據量和其他reduce差異過大。一般就是遇到了數據傾斜的問題。數據傾斜其實是進行分佈式計算的時候,某些節點的計算能力比較強或者需要計算的數據比較少,早早執行完了,某些節點計算的能力較差或者由於此節點需要計算的數據比較多,導致出現其他節點的reduce階段任務執行完成,但是這種節點的數據處理任務還沒有執行完成。

2.產生原因

1)key分佈不均勻

2)業務數據本身的特性

3)建表時考慮不周

4)某些sql語句本身就有數據傾斜,如下表所示:

關鍵詞

情形

後果

join

中一個表較小,但是key集中

分發到某一個或幾個reduce上的數據遠高於平均值

join

大表與大表,但是分桶的判斷字段0值或空值過多

這些空值都由一個reduce處理,非常慢

group by

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

處理某值的reduce灰常耗時

count distinct

某特殊值過多

處理此特殊值reduce耗時

(待完善)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章