mr資料傾斜優化

2021-08-21 20:54:07 字數 2166 閱讀 2958

資料傾斜是資料中的常見情況。資料中不可避免地會出現離群值(outlier),並導致資料傾斜。這些離群值會顯著地拖慢mapreduce的執行。常見的資料傾斜有以下幾類:

資料頻率傾斜——某乙個區域的資料量要遠遠大於其他區域。

資料大小傾斜——部分記錄的大小遠遠大於平均值。

在map端和reduce端都有可能發生資料傾斜。在map端的資料傾斜會讓多樣化的資料集的處理效率更低。在reduce端的資料傾斜常常**於mapreduce的預設分割槽器。

資料傾斜會導致map和reduce的任務執行時間大為延長,也會讓需要快取資料集的操作消耗更多的記憶體資源。

前面6.2.2和6.2.3中的技術29和34介紹了如何診斷是否存在資料傾斜。這一節中將介紹如何確定傾斜的資料,如何緩解它們的影響。

收集傾斜資料

本技術將關注由map的輸出資料中的資料頻率傾斜的問題。

問題需要診斷map輸出中哪些鍵存在資料傾斜。

方案在reduce方法中加入記錄map輸出鍵的詳細情況的功能。

討論在發現了傾斜資料的存在之後,就很有必要診斷造成資料傾斜的那些鍵。有乙個簡便方法就是在**裡實現追蹤每個鍵的最大值。為了減少追蹤量,可以設定資料量閥值,只追蹤那些資料量大於閥值的鍵,並輸出到日誌中。實現**如下。

1 public static final string max_values = "skew.maxvalues";

2 private int maxvaluethreshold;

3 4 @override

5 public void configure(jobconf job)

8 9 @override

10 public void reduce(text key, iteratorvalues,

11 outputcollectoroutput,

12 reporter reporter) throws ioexception

20

21 if (++i > maxvaluethreshold)

24 }

執行作業後就可以從日誌中判斷發生傾斜的鍵以及傾斜程度。

小結跟蹤傾斜資料是了解資料的重要一步,也是設計mapreduce作業的重要基礎。

下一步介紹如何減小reduce資料傾斜的效能損失了。

減小reduce端資料傾斜的效能損失

reduce資料傾斜一般是指map的輸出資料中存在資料頻率傾斜的狀況,也就是部分輸出鍵的資料量遠遠大於其它的輸出鍵。

問題需要減小reduce端資料傾斜的效能損失。

討論用一系列的方法減小資料傾斜的風險,例如使用自定義的分割槽器,使用map端連線等。

方案在這個方案中將討論多個減輕reduce資料傾斜的效能損失的方法。

方法1:抽樣和範圍分割槽

hadoop預設的分割槽器是基於map輸出鍵的雜湊值分割槽。這僅在資料分布比較均勻時比較好。在有資料傾斜時就很有問題。

使用分割槽器需要首先了解資料的特性。在第4章的totalorderpartitioner中,可以通過對原始資料進行抽樣得到的結果集來預設分割槽邊界值。totalorderpartitioner中的範圍分割槽器可以通過預設的分割槽邊界值進行分割槽。因此它也可以很好地用在矯正資料中的部分鍵的資料傾斜問題。

方法2:自定義分割槽

另乙個抽樣和範圍分割槽的替代方案是基於輸出鍵的背景知識進行自定義分割槽。例如,如果map輸出鍵的單詞**於一本書。其中大部分必然是省略詞(stopword)。那麼就可以將自定義分割槽將這部分省略詞傳送給固定的一部分reduce例項。而將其他的都傳送給剩餘的reduce例項。

方法3:combine

使用combine可以大量地減小資料頻率傾斜和資料大小傾斜。在可能的情況下,combine的目的就是聚合並精簡資料。在技術48種介紹了combine。

方法4:map端連線和半連線

如果連線的資料集太大而不能在map端的連線中使用。那麼可以考慮第4章和第7章中介紹的超大資料集的連線優化方案。

方法5:資料大小傾斜的自定義策略

在map端或reduce端的資料大小傾斜都會對快取造成較大的影響,乃至導致outofmemoryerror異常。處理這種情況並不容易。可以參考以下方法。 小結

下一部分將介紹如何使用者**中對效能影響較大的情況,以及相應的優化方案。

MR資料傾斜解決方案

1.資料傾斜 由於mapreduce程式是按照key的hash值進行分割槽的 如果某些單詞特別多 特別多的單詞就會被分到同乙個reduce去處理 有些reducere任務處理的資料量小 有些reduce任務處理的資料量非常大 只有所有的reduce任務完成以後job才算完成 造成job的工作時間變長...

資料傾斜優化

資料傾斜 在分布式程式分配任務的時候,任務分配的不平均。資料傾斜,在企業開發中是經常遇到的,以及是非常影響效能的一種場景。資料傾斜一旦發生,橫向拓展只能緩解這個情況,而不能解決這個情況。如果遇到資料傾斜,一定要從根本上去解決這個問題。而不是想著加機器來解決。方案一用前面講過的map join smb...

hive 資料傾斜優化

hive資料傾斜 group by 中的計算均衡優化 1.map端部分聚合 先看看下面這條sql,由於使用者的性別只有男和女兩個值 未知 如果沒有map端的部分聚合優化,map直接把groupby key 當作reduce key傳送給reduce做聚合,就會導致計算不均衡的現象。雖然map有100...