資料傾斜理解

2021-09-14 08:10:28 字數 1219 閱讀 7736

資料傾斜的原因和解決方案:

原因:資料傾斜是指,map /reduce程式執行時,reduce節點大部分執行完畢,但是有乙個或者幾個reduce節點執行很慢,導致整個程式的處理時間很長,這是因為某乙個key的條數比其他key多很多(有時是百倍或者千倍之多),這條key所在的reduce節點所處理的資料量比其他節點就大很多,從而導致某幾個節點遲遲執行不完。

方案:1)網上找了下,spark資料傾斜的解決方案:

解決方案一:使用hive etl預處理資料

解決方案二:過濾少數導致傾斜的key

解決方案三:提高shuffle操作的並行度

解決方案四:兩階段聚合(區域性聚合+全域性聚合)

資料傾斜:

資料傾斜在mapreduce程式設計模型中十分常見,用最通俗易懂的話來說,資料傾斜無非就是大量的相同key被partition分配到乙個分割槽裡,造成了』乙個人累死,其他人閒死』的情況,這種情況是我們不能接受的,這也違背了平行計算的初衷,首先乙個節點要承受著巨大的壓力,而其他節點計算完畢後要一直等待這個忙碌的節點,也拖累了整體的計算時間,可以說效率是十分低下的。

解決方案:

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速率),推薦使用這種方法。

深入理解hadoop資料傾斜

我們在用map reduce程式執行時,有時候會發現reduce節點大部分執行完畢,但是有乙個或者幾個reduce節點執行很慢,導致整個程式的處理時間很長,這是因為某乙個key的條數比其他key多很多 有時是百倍或者千倍之多 這條key所在的reduce節點所處理的資料量比其他節點就大很多,從而導致...

mysql資料傾斜 Hive SQL 資料傾斜總結

在海量資料下的資料查詢中,資料傾斜是乙個很恐怖的場景。常常看似很普通的資料查詢,執行了幾個小時也沒有結果,其原因往往是發生了資料傾斜。如果真對資料傾斜採取相應的解決方法,那麼查詢效率將會大大提高。所以,分析資料傾斜是一件相當有意義的任務。本文總結不同情況下的資料傾斜,並分別給出解決方法。資料傾斜 資...

什麼是資料傾斜,怎麼解決資料傾斜?

相信很多接觸mapreduce的朋友對 資料傾斜 這四個字並不陌生,那麼究竟什麼是資料傾斜?又改怎樣解決這種該死的情況呢?何為資料傾斜?正常的資料分布理論上都是傾斜的,就是我們所說的2 8原理 80 的財富集中在20 的人手中,80 的使用者只使用20 的功能,20 的使用者貢獻了80 的訪問量,不...