大数据常见问题:数据倾斜
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中的數據傾斜表現:
2)hive中數據傾斜
一般都發生在Sql中group by和join on上,而且和數據邏輯綁定比較深。
3)Spark中的數據傾斜
Spark中的數據傾斜,包括Spark Streaming和Spark Sql,表現主要有下面幾種:
二、數據傾斜產生原因
我們以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)從業務和數據上解決數據傾斜
很多數據傾斜都是在數據的使用上造成的。我們舉幾個場景,并分別給出它們的解決方案。
?
我是橋哥,專注分享大數據知識體系?& Python黑科技。
求點贊、求評論、求收藏!!
總結
以上是生活随笔為你收集整理的大数据常见问题:数据倾斜的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Material Design风格登录注
- 下一篇: 冈萨雷斯《数字图像处理》读书笔记(十一)