溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive數(shù)據(jù)傾斜的概念及處理方式

發(fā)布時間:2021-07-28 18:19:25 來源:億速云 閱讀:542 作者:chen 欄目:大數(shù)據(jù)

本篇內容主要講解“Hive數(shù)據(jù)傾斜的概念及處理方式”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Hive數(shù)據(jù)傾斜的概念及處理方式”吧!

Hive數(shù)據(jù)傾斜及處理

① 數(shù)據(jù)傾斜的概念及原因

1.1 數(shù)據(jù)傾斜

    數(shù)據(jù)傾斜就是數(shù)據(jù)的分布不平衡,某些地方特別多,某些地方又特別少,導致的在處理數(shù)據(jù)的時候,有些很快就處理完了,而有些又遲遲未能處理完,導致整體任務最終遲遲無法完成,這種現(xiàn)象就是數(shù)據(jù)傾斜。

    針對mapreduce的過程來說就是,有多個reduce,其中有一個或者若干個reduce要處理的數(shù)據(jù)量特別大,而其他的reduce處理的數(shù)據(jù)量則比較小,那么這些數(shù)據(jù)量小的reduce很快就可以完成,而數(shù)據(jù)量大的則需要很多時間,導致整個任務一直在等它而遲遲無法完成。

跑mr任務時常見的reduce的進度總是卡在99%,這種現(xiàn)象很大可能就是數(shù)據(jù)傾斜造成的。


1.2 產(chǎn)生數(shù)據(jù)傾斜的原因

  • key分布不均勻

    上面就說過,數(shù)據(jù)傾斜是因為reduce的數(shù)據(jù)量大小差異過大,而reduce的數(shù)據(jù)是分區(qū)的結果,分區(qū)是對key求hash值,根據(jù)hash值決定該key被分到某個分區(qū),進而進入到某個reduce,而如果key很集中或者相同,那么計算得到它們的hash值可能一樣,那么就會被分配到同一個reduce,就會造成這個reduce所要處理的數(shù)據(jù)量過大。

  • 業(yè)務數(shù)據(jù)本身的特性

     比如某些業(yè)務數(shù)據(jù)作為key的字段本就很集中,那么結果肯定會導致數(shù)據(jù)傾斜啊。

    還有其他的一些原因,但是,根本原因還是key的分布不均勻,而其他的原因就是會造成key不均勻,進而導致數(shù)據(jù)傾斜的后果,所以說根本原因是key的分布不均勻。

1.3 數(shù)據(jù)傾斜的表現(xiàn)

  • 任務進度長時間維持在99%(或100%),查看任務監(jiān)控頁面,發(fā)現(xiàn)只有少量(1個或幾個)reduce子任務未完成。因為其處理的數(shù)據(jù)量和其他reduce差異過大。

  • 單一reduce的記錄數(shù)與平均記錄數(shù)差異過大,通??赡苓_到3倍甚至更多。 最長時長遠大于平均時長。

② 數(shù)據(jù)傾斜的解決辦法

Hive數(shù)據(jù)傾斜的概念及處理方式

2.1 設置參數(shù)

hive.map.aggr = true    // Map 端部分聚合,相當于Combiner;

hive.groupby.skewindata=true    //

有數(shù)據(jù)傾斜的時候進行負載均衡,當選項設定為 true,生成的查詢計劃會有兩個 MR Job。第一個 MR Job 中,Map 的輸出結果集合會隨機分布到 Reduce 中,每個 Reduce 做部分聚合操作,并輸出結果,這樣處理的結果是相同的 Group By Key 有可能被分發(fā)到不同的 Reduce 中,從而達到負載均衡的目的;第二個 MR Job 再根據(jù)預處理的數(shù)據(jù)結果按照 Group By Key 分布到 Reduce 中(這個過程可以保證相同的 Group By Key 被分布到同一個 Reduce 中),最后完成最終的聚合操作。

2.2 SQL語句優(yōu)化

  •  大小表join

使用map join讓小的維度表(1000條以下的記錄條數(shù)) 先進內存。在map端完成reduce。

  • 大表Join大表

把空值的key變成一個字符串加上隨機數(shù),把傾斜的數(shù)據(jù)分到不同的reduce上,由于null值關聯(lián)不上,處理后并不影響最終結果。

  • count distinct大量相同特殊值

count distinct時,將值為空的情況單獨處理,如果是計算count distinct,可以不用處理,直接過濾,在最后結果中加1。如果還有其他計算,需要進行group by,可以先將值為空的記錄單獨處理,再和其他計算結果進行union。

  • 特殊情況特殊處理

在業(yè)務邏輯優(yōu)化效果的不大情況下,有些時候是可以將傾斜的數(shù)據(jù)單獨拿出來處理。最后union回去。

到此,相信大家對“Hive數(shù)據(jù)傾斜的概念及處理方式”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI