日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

大数据常见问题:数据倾斜

發(fā)布時(shí)間:2024/7/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据常见问题:数据倾斜 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

offer收割系列介紹

1、分享橋哥本人或小伙伴在面試大廠時(shí)遇到的真題,并給出參考答案!!如果能幫到大家,點(diǎn)贊、收藏、評(píng)論是對(duì)我最大的支持!!

2、涉及崗位:主要為大數(shù)據(jù)開(kāi)發(fā)、數(shù)據(jù)倉(cāng)庫(kù)(橋哥干過(guò)的),其它崗位也可參考

3、涵蓋技術(shù):mysql、hadoop、hive、Spark、Flink、Kudu、Impala等...

?

推薦閱讀

★?數(shù)據(jù)倉(cāng)庫(kù)專欄:數(shù)倉(cāng)方法論、實(shí)戰(zhàn)經(jīng)驗(yàn)、面試真題(https://blog.csdn.net/weixin_39032019/category_8871528.html)

★?Python專欄:Python黑科技:爬蟲(chóng)、算法、小工具(https://blog.csdn.net/weixin_39032019/category_8974792.html)

★?大數(shù)據(jù)面試專欄:面試真題、開(kāi)發(fā)經(jīng)驗(yàn)、調(diào)優(yōu)策略(https://blog.csdn.net/weixin_39032019/category_11048805.html)

?

一、數(shù)據(jù)傾斜表現(xiàn)

1)hadoop中的數(shù)據(jù)傾斜表現(xiàn):

  • 有一個(gè)多幾個(gè)Reduce卡住,卡在99.99%,一直不能結(jié)束。
  • 各種container報(bào)錯(cuò)OOM
  • 異常的Reducer讀寫的數(shù)據(jù)量極大,至少遠(yuǎn)遠(yuǎn)超過(guò)其它正常的Reducer
  • 伴隨著數(shù)據(jù)傾斜,會(huì)出現(xiàn)任務(wù)被kill等各種詭異的表現(xiàn)。
  • 2)hive中數(shù)據(jù)傾斜

    一般都發(fā)生在Sql中g(shù)roup by和join on上,而且和數(shù)據(jù)邏輯綁定比較深。

    3)Spark中的數(shù)據(jù)傾斜

    Spark中的數(shù)據(jù)傾斜,包括Spark Streaming和Spark Sql,表現(xiàn)主要有下面幾種:

  • Executor lost,OOM,Shuffle過(guò)程出錯(cuò);
  • Driver OOM;
  • 單個(gè)Executor執(zhí)行時(shí)間特別久,整體任務(wù)卡在某個(gè)階段不能結(jié)束;
  • 正常運(yùn)行的任務(wù)突然失敗;
  • 二、數(shù)據(jù)傾斜產(chǎn)生原因

    我們以Spark和Hive的使用場(chǎng)景為例。

    他們?cè)谧鰯?shù)據(jù)運(yùn)算的時(shí)候會(huì)涉及到,count distinct、group by、join on等操作,這些都會(huì)觸發(fā)Shuffle動(dòng)作。一旦觸發(fā)Shuffle,所有相同key的值就會(huì)被拉到一個(gè)或幾個(gè)Reducer節(jié)點(diǎn)上,容易發(fā)生單點(diǎn)計(jì)算問(wèn)題,導(dǎo)致數(shù)據(jù)傾斜。

    一般來(lái)說(shuō),數(shù)據(jù)傾斜原因有以下幾方面:

    1)key分布不均勻

    2)建表時(shí)考慮不周

    我們舉一個(gè)例子,就說(shuō)數(shù)據(jù)默認(rèn)值的設(shè)計(jì)吧,假設(shè)我們有兩張表:

    user(用戶信息表):userid,register_ip

    ip(IP表):ip,register_user_cnt

    這可能是兩個(gè)不同的人開(kāi)發(fā)的數(shù)據(jù)表。如果我們的數(shù)據(jù)規(guī)范不太完善的話,會(huì)出現(xiàn)一種情況:

    user表中的register_ip字段,如果獲取不到這個(gè)信息,我們默認(rèn)為null;

    但是在ip表中,我們?cè)诮y(tǒng)計(jì)這個(gè)值的時(shí)候,為了方便,我們把獲取不到ip的用戶,統(tǒng)一認(rèn)為他們的ip為0。

    兩邊其實(shí)都沒(méi)有錯(cuò)的,但是一旦我們做關(guān)聯(lián)了,這個(gè)任務(wù)會(huì)在做關(guān)聯(lián)的階段,也就是sql的on的階段卡死。

    3)業(yè)務(wù)數(shù)據(jù)激增

    比如訂單場(chǎng)景,我們?cè)谀骋惶煸诒本┖蜕虾蓚€(gè)城市多了強(qiáng)力的推廣,結(jié)果可能是這兩個(gè)城市的訂單量增長(zhǎng)了10000%,其余城市的數(shù)據(jù)量不變。

    然后我們要統(tǒng)計(jì)不同城市的訂單情況,這樣,一做group操作,可能直接就數(shù)據(jù)傾斜了。

    三、解決數(shù)據(jù)傾斜思路

    很多數(shù)據(jù)傾斜的問(wèn)題,都可以用和平臺(tái)無(wú)關(guān)的方式解決,比如更好的數(shù)據(jù)預(yù)處理異常值的過(guò)濾等。因此,解決數(shù)據(jù)傾斜的重點(diǎn)在于對(duì)數(shù)據(jù)設(shè)計(jì)和業(yè)務(wù)的理解,這兩個(gè)搞清楚了,數(shù)據(jù)傾斜就解決了大部分了

    1)業(yè)務(wù)邏輯

    我們從業(yè)務(wù)邏輯的層面上來(lái)優(yōu)化數(shù)據(jù)傾斜,比如上面的兩個(gè)城市做推廣活動(dòng)導(dǎo)致那兩個(gè)城市數(shù)據(jù)量激增的例子,我們可以單獨(dú)對(duì)這兩個(gè)城市來(lái)做count,單獨(dú)做時(shí)可用兩次MR,第一次打散計(jì)算,第二次再最終聚合計(jì)算。完成后和其它城市做整合。

    2)程序?qū)用?/strong>

    比如說(shuō)在Hive中,經(jīng)常遇到count(distinct)操作,這樣會(huì)導(dǎo)致最終只有一個(gè)Reduce任務(wù)。

    我們可以先group by,再在外面包一層count,就可以了。比如計(jì)算按用戶名去重后的總用戶量:

    (1)優(yōu)化前

    只有一個(gè)reduce,先去重再count負(fù)擔(dān)比較大: select name,count(distinct name)from user;

    (2)優(yōu)化后

    // 設(shè)置該任務(wù)的每個(gè)job的reducer個(gè)數(shù)為3個(gè)。Hive默認(rèn)-1,自動(dòng)推斷。

    set mapred.reduce.tasks=3;

    // 啟動(dòng)兩個(gè)job,一個(gè)負(fù)責(zé)子查詢(可以有多個(gè)reduce),另一個(gè)負(fù)責(zé)count(1):

    select count(1) from (select name from user group by name) tmp;

    3)調(diào)參方面

    Hadoop和Spark都自帶了很多的參數(shù)和機(jī)制來(lái)調(diào)節(jié)數(shù)據(jù)傾斜,合理利用它們就能解決大部分問(wèn)題。

    詳見(jiàn):

    1、hive 參數(shù)設(shè)置大全:https://blog.csdn.net/weixin_39032019/article/details/111912916

    2、spark-submit 參數(shù)設(shè)置:https://blog.csdn.net/weixin_39032019/article/details/103371674

    3、kudu 參數(shù)設(shè)置:https://blog.csdn.net/weixin_39032019/article/details/110534549

    4)從業(yè)務(wù)和數(shù)據(jù)上解決數(shù)據(jù)傾斜

    很多數(shù)據(jù)傾斜都是在數(shù)據(jù)的使用上造成的。我們舉幾個(gè)場(chǎng)景,并分別給出它們的解決方案。

  • 數(shù)據(jù)有損的方法:找到異常數(shù)據(jù),比如ip為0的數(shù)據(jù),過(guò)濾掉
  • 數(shù)據(jù)無(wú)損的方法:對(duì)分布不均勻的數(shù)據(jù),單獨(dú)計(jì)算
  • hash法:先對(duì)key做一層hash,先將數(shù)據(jù)隨機(jī)打散讓它的并行度變大,再匯聚
  • 數(shù)據(jù)預(yù)處理:就是先做一層數(shù)據(jù)質(zhì)量處理,類似于數(shù)據(jù)倉(cāng)庫(kù)維度建模時(shí),底層先處理數(shù)據(jù)質(zhì)量
  • ?

    我是橋哥,專注分享大數(shù)據(jù)知識(shí)體系?& Python黑科技。

    求點(diǎn)贊、求評(píng)論、求收藏!!

    總結(jié)

    以上是生活随笔為你收集整理的大数据常见问题:数据倾斜的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。