十年網(wǎng)站開發(fā)經驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本篇內容主要講解“Hive數(shù)據(jù)傾斜的概念及處理方式”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Hive數(shù)據(jù)傾斜的概念及處理方式”吧!
江安網(wǎng)站建設公司創(chuàng)新互聯(lián)公司,江安網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經驗。已為江安上千多家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\成都外貿網(wǎng)站建設公司要多少錢,請找那個售后服務好的江安做網(wǎng)站的公司定做!
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 產生數(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倍甚至更多。 最長時長遠大于平均時長。
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ù)傾斜的概念及處理方式”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!