欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

16、Hive數(shù)據(jù)傾斜與解決方案

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

1、什么是數(shù)據(jù)傾斜

由于數(shù)據(jù)分布不均勻,造成數(shù)據(jù)大量的集中到一點(diǎn),造成數(shù)據(jù)熱點(diǎn)

2、數(shù)據(jù)傾斜的現(xiàn)象

在執(zhí)行任務(wù)的時(shí)候,任務(wù)進(jìn)度長(zhǎng)時(shí)間維持在99%左右,查看任務(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)。

3、數(shù)據(jù)傾斜的情況

16、Hive數(shù)據(jù)傾斜與解決方案

創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司一直秉承“誠(chéng)信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶多一個(gè)朋友!專注中小微企業(yè)官網(wǎng)定制,成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè),塑造企業(yè)網(wǎng)絡(luò)形象打造互聯(lián)網(wǎng)企業(yè)效應(yīng)。

4、數(shù)據(jù)傾斜的原因

1)、key分布不均勻

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

3)、建表時(shí)考慮不周

4)、某些SQL語(yǔ)句本身就有數(shù)據(jù)傾斜

5、數(shù)據(jù)傾斜的解決方案

5.1 map端聚合
--Map 端部分聚合,相當(dāng)于Combiner
hive.map.aggr = true;
--有數(shù)據(jù)傾斜的時(shí)候進(jìn)行負(fù)載均衡
hive.groupby.skewindata=true;

--有數(shù)據(jù)傾斜的時(shí)候進(jìn)行負(fù)載均衡,當(dāng)選項(xiàng)設(shè)定為 true,生成的查詢計(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 中),最后完成最終的聚合操作。
5.2 SQL語(yǔ)句調(diào)節(jié)
  • 如何Join

    關(guān)于驅(qū)動(dòng)表的取,用join key分布最均勻的表作為驅(qū)動(dòng)表
    做好列裁剪和filter操作,以達(dá)到兩表做join的時(shí)候,數(shù)據(jù)量相對(duì)變小的效果。
  • 大小表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。
  • group by維度過(guò)小

    采用sum() group by的方式來(lái)替換count(distinct)完成計(jì)算。
  • 特殊情況特殊處理

    在業(yè)務(wù)邏輯優(yōu)化效果的不大情況下,一些時(shí)候是可以將傾斜的數(shù)據(jù)單獨(dú)拿出來(lái)處理。最后union回去
5.3 典型的業(yè)務(wù)場(chǎng)景
  • 空值產(chǎn)生的數(shù)據(jù)傾斜

    • 場(chǎng)景
    如日志中,常會(huì)有信息丟失的問題,比如日志中的 user_id,如果取其中的 user_id 和 用戶表中的user_id 關(guān)聯(lián),會(huì)碰到數(shù)據(jù)傾斜的問題。
    • 解決辦法
    --user_id為空的不參與關(guān)聯(lián)
    
    select * from log a
    join users b
    on a.user_id is not null
    and a.user_id = b.user_id
    union all
    select * from log a
    where a.user_id is null;
    
    --賦與空值分新的key值
    select *
    from log a
    left outer join users b
    on case when a.user_id is null then concat(‘hive’,rand()) else a.user_id end = b.user_id;
    
  • 不同數(shù)據(jù)類型關(guān)聯(lián)產(chǎn)生數(shù)據(jù)傾斜

    • 場(chǎng)景
    用戶表中user_id字段為int,log表中user_id字段既有string類型也有int類型。當(dāng)按照user_id進(jìn)行兩個(gè)表的Join操作時(shí),默認(rèn)的Hash操作會(huì)按int型的id來(lái)進(jìn)行分配,這樣會(huì)導(dǎo)致所有string類型id的記錄都分配到一個(gè)Reducer中。
    • 解決辦法

    • 把數(shù)字類型轉(zhuǎn)換成字符串類型
    select * from users a
      left outer join logs b
      on a.usr_id = cast(b.user_id as string);
    

網(wǎng)頁(yè)標(biāo)題:16、Hive數(shù)據(jù)傾斜與解決方案
標(biāo)題URL:http://chinadenli.net/article18/gjspdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、建站公司網(wǎng)站策劃、靜態(tài)網(wǎng)站、定制網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)

廣告

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

商城網(wǎng)站建設(shè)