資料傾斜:就是大量的相同key被partition分配到乙個分割槽裡,map /reduce程式執行時,reduce節點大部分執行完畢,但是有乙個或者幾個reduce節點執行很慢,導致整個程式的處理時間很長,
這是因為某乙個key的條數比其他key多很多(有時是百倍或者千倍之多),這條key所在的reduce節點所處理的資料量比其他節點就大很多,從而導致某幾個節點遲遲執行不完。
解決方案:
1.增加jvm記憶體,這適用於第一種情況(唯一值非常少,極少數值有非常多的記錄值(唯一值少於幾千)),這種情況下,往往只能通過硬體的手段來進行調優,增加jvm記憶體可以顯著的提高執行效率。
2.增加reduce的個數,這適用於第二種情況(唯一值比較多,這個欄位的某些值有遠遠多於其他值的記錄數,但是它的佔比也小於百分之一或千分之一),我們知道,這種情況下,
最容易造成的結果就是大量相同key被partition到乙個分割槽,從而乙個reduce執行了大量的工作,而如果我們增加了reduce的個數,這種情況相對來說會減輕很多,畢竟計算的節點多了,就算工作量還是不均勻的,那也要小很多。
3.自定義分割槽,這需要使用者自己繼承partition類,指定分割槽策略,這種方式效果比較顯著。
4.重新設計key,有一種方案是在map階段時給key加上乙個隨機數,有了隨機數的key就不會被大量的分配到同一節點(小幾率),待到reduce後再把隨機數去掉即可。
5.使用combinner合併,combinner是在map階段,reduce之前的乙個中間階段,在這個階段可以選擇性的把大量的相同key資料先進行乙個合併,可以看做是local reduce,然後再交給reduce來處理,
這樣做的好處很多,即減輕了map端向reduce端傳送的資料量(減輕了網路頻寬),也減輕了map端和reduce端中間的shuffle階段的資料拉取數量(本地化磁碟io速率),推薦使用這種方法。
hive資料傾斜及解決辦法
資料傾斜簡單的來講就是資料分布不均勻。導致在處理資料時,有些任務很快處理結束,而有些任務遲遲未處理完。資料傾斜主要為reduce端傾斜,原因為主要是partition 分割槽 不均勻導致。分割槽是對key求hash值,根據hash值取模 預設 決定該key被分到某個分割槽,從而進入到某個reduce...
Hive資料傾斜解決辦法總結
我的知乎 darrenchan陳馳 資料傾斜是進行大資料計算時最經常遇到的問題之一。當我們在執行hiveql或者執行mapreduce作業時候,如果遇到一直卡在map100 reduce99 一般就是遇到了資料傾斜的問題。資料傾斜其實是進行分布式計算的時候,某些節點的計算能力比較強或者需要計算的資料...
Hive資料傾斜解決辦法總結
資料傾斜是進行大資料計算時最經常遇到的問題之一。當我們在執行hiveql或者執行mapreduce作業時候,如果遇到一直卡在map100 reduce99 一般就是遇到了資料傾斜的問題。資料傾斜其實是進行分布式計算的時候,某些節點的計算能力比較強或者需要計算的資料比較少,早早執行完了,某些節點計算的...