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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/7/23 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据常见问题:数据倾斜 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

offer收割系列介紹

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

2、涉及崗位:主要為大數據開發、數據倉庫(橋哥干過的),其它崗位也可參考

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

?

推薦閱讀

★?數據倉庫專欄:數倉方法論、實戰經驗、面試真題(https://blog.csdn.net/weixin_39032019/category_8871528.html)

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

★?大數據面試專欄:面試真題、開發經驗、調優策略(https://blog.csdn.net/weixin_39032019/category_11048805.html)

?

一、數據傾斜表現

1)hadoop中的數據傾斜表現:

  • 有一個多幾個Reduce卡住,卡在99.99%,一直不能結束。
  • 各種container報錯OOM
  • 異常的Reducer讀寫的數據量極大,至少遠遠超過其它正常的Reducer
  • 伴隨著數據傾斜,會出現任務被kill等各種詭異的表現。
  • 2)hive中數據傾斜

    一般都發生在Sql中group by和join on上,而且和數據邏輯綁定比較深。

    3)Spark中的數據傾斜

    Spark中的數據傾斜,包括Spark Streaming和Spark Sql,表現主要有下面幾種:

  • Executor lost,OOM,Shuffle過程出錯;
  • Driver OOM;
  • 單個Executor執行時間特別久,整體任務卡在某個階段不能結束;
  • 正常運行的任務突然失敗;
  • 二、數據傾斜產生原因

    我們以Spark和Hive的使用場景為例。

    他們在做數據運算的時候會涉及到,count distinct、group by、join on等操作,這些都會觸發Shuffle動作。一旦觸發Shuffle,所有相同key的值就會被拉到一個或幾個Reducer節點上,容易發生單點計算問題,導致數據傾斜。

    一般來說,數據傾斜原因有以下幾方面:

    1)key分布不均勻

    2)建表時考慮不周

    我們舉一個例子,就說數據默認值的設計吧,假設我們有兩張表:

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

    ip(IP表):ip,register_user_cnt

    這可能是兩個不同的人開發的數據表。如果我們的數據規范不太完善的話,會出現一種情況:

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

    但是在ip表中,我們在統計這個值的時候,為了方便,我們把獲取不到ip的用戶,統一認為他們的ip為0。

    兩邊其實都沒有錯的,但是一旦我們做關聯了,這個任務會在做關聯的階段,也就是sql的on的階段卡死。

    3)業務數據激增

    比如訂單場景,我們在某一天在北京和上海兩個城市多了強力的推廣,結果可能是這兩個城市的訂單量增長了10000%,其余城市的數據量不變。

    然后我們要統計不同城市的訂單情況,這樣,一做group操作,可能直接就數據傾斜了。

    三、解決數據傾斜思路

    很多數據傾斜的問題,都可以用和平臺無關的方式解決,比如更好的數據預處理異常值的過濾等。因此,解決數據傾斜的重點在于對數據設計和業務的理解,這兩個搞清楚了,數據傾斜就解決了大部分了。

    1)業務邏輯

    我們從業務邏輯的層面上來優化數據傾斜,比如上面的兩個城市做推廣活動導致那兩個城市數據量激增的例子,我們可以單獨對這兩個城市來做count,單獨做時可用兩次MR,第一次打散計算,第二次再最終聚合計算。完成后和其它城市做整合。

    2)程序層面

    比如說在Hive中,經常遇到count(distinct)操作,這樣會導致最終只有一個Reduce任務。

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

    (1)優化前

    只有一個reduce,先去重再count負擔比較大: select name,count(distinct name)from user;

    (2)優化后

    // 設置該任務的每個job的reducer個數為3個。Hive默認-1,自動推斷。

    set mapred.reduce.tasks=3;

    // 啟動兩個job,一個負責子查詢(可以有多個reduce),另一個負責count(1):

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

    3)調參方面

    Hadoop和Spark都自帶了很多的參數和機制來調節數據傾斜,合理利用它們就能解決大部分問題。

    詳見:

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

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

    3、kudu 參數設置:https://blog.csdn.net/weixin_39032019/article/details/110534549

    4)從業務和數據上解決數據傾斜

    很多數據傾斜都是在數據的使用上造成的。我們舉幾個場景,并分別給出它們的解決方案。

  • 數據有損的方法:找到異常數據,比如ip為0的數據,過濾掉
  • 數據無損的方法:對分布不均勻的數據,單獨計算
  • hash法:先對key做一層hash,先將數據隨機打散讓它的并行度變大,再匯聚
  • 數據預處理:就是先做一層數據質量處理,類似于數據倉庫維度建模時,底層先處理數據質量
  • ?

    我是橋哥,專注分享大數據知識體系?& Python黑科技。

    求點贊、求評論、求收藏!!

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。