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

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

江安網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,江安網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為江安上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的江安做網(wǎng)站的公司定做!

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

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

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

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

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

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


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

  • key分布不均勻

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

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

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

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

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

  • 任務(wù)進(jìn)度長(zhǎng)時(shí)間維持在99%(或100%),查看任務(wù)監(jiān)控頁(yè)面,發(fā)現(xiàn)只有少量(1個(gè)或幾個(gè))reduce子任務(wù)未完成。因?yàn)槠涮幚淼臄?shù)據(jù)量和其他reduce差異過(guò)大。

  • 單一reduce的記錄數(shù)與平均記錄數(shù)差異過(guò)大,通??赡苓_(dá)到3倍甚至更多。 最長(zhǎng)時(shí)長(zhǎng)遠(yuǎn)大于平均時(shí)長(zhǎng)。

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

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

2.1 設(shè)置參數(shù)

hive.map.aggr = true   // Map 端部分聚合,相當(dāng)于Combiner;

hive.groupby.skewindata=true    //

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

2.2 SQL語(yǔ)句優(yōu)化

  •  大小表join

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

  • 大表Join大表

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

  • count distinct大量相同特殊值

count distinct時(shí),將值為空的情況單獨(dú)處理,如果是計(jì)算count distinct,可以不用處理,直接過(guò)濾,在最后結(jié)果中加1。如果還有其他計(jì)算,需要進(jìn)行g(shù)roup by,可以先將值為空的記錄單獨(dú)處理,再和其他計(jì)算結(jié)果進(jìn)行union。

  • 特殊情況特殊處理

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

到此,相信大家對(duì)“Hive數(shù)據(jù)傾斜的概念及處理方式”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站題目:Hive數(shù)據(jù)傾斜的概念及處理方式
鏈接地址:http://www.muchs.cn/article18/gehsgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、定制網(wǎng)站、服務(wù)器托管企業(yè)網(wǎng)站制作、全網(wǎng)營(yíng)銷(xiāo)推廣網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)