MapReduce 四種基本設計模式

langbo213 8年前發布 | 10K 次閱讀 設計模式 MapReduce

這篇文章討論了 MapReduce design patterns的四種基本設計模式:

1. Input-Map-Reduce-Output

2. Input-Map-Output

3. Input-Multiple Maps-Reduce-Output

4. Input-Map-Combiner-Reduce-Output

下面是一些真實場景,幫助你理解,什么時候使用那種模式更為恰當。

Input-Map-Reduce-Output

如果需要進行聚合操作,就要使用到這種模式。

為了計算不同性別人員的總工資,我們需要生成以性別為鍵,以薪水為值的鍵值對,鍵值對進行Map操作的結果如下:

將相同key的value放到一個集合中,給Reduce操作提供以下數據:

Reduce操作后的結果如下:

Input-Map-Output

Reduce操作最常見的用法是 集合計算 ,如果僅僅希望改變數據格式,那么使用Input-Map-Output模式。

在Input-Multiple Maps-Reduce-Output設計模式中,我們從2個文件中獲取數據,每個有不同的語法,(注意:雖然是多個文件,但是有相同的語法,那么沒有必要使用2個映射器,我們可以簡單的提供不同的輸入文件路徑解決,在一個映射器中使用相同的邏輯即可。)

這個模式也被在 Reduce-Side Join 中使用:

Input-Map-Combiner-Reduce-Output

Apache Spark 對于操作大和小的數據處理任務是非常高效的,不僅僅因為它重新造了輪子,而且它放大了進行有效分析的現有工具。它在商用級硬件上的高度可擴展性,和其他知名大數據處理引擎相比,它擁有令人難以置信的性能,Spark可能終將讓軟件蠶食世界。

Combiner,也被稱為半個Reduce,是一個可選的類,它接收Map類的輸入然后將鍵值對傳遞給Reducer類。Combiner函數的目的是降低Reducer的工作量。

在一個MapReduce程序里, 20%的工作在Map階段完成, 這也是一個數據準備的階段,這個階段的工作是并行進行的。

80% 的工作在Reducer階段完成, 這也稱為計算階段.。這個階段工作不是并行進行的,所以比Map階段慢。為了減少計算時間,可以將Reducer階段的部分工作移動到Combiner階段完成。

Scenario

現有多個部門,我們需要按照不同部門計算總工資,然后再按照性別計算總工資。而且,在計算總和時還有額外的條件。按性別計算各部門的總數之后:

如果總部門工資大于200K,在總數上增加25K。

如果總部門工資大于100K,在總數上增加10K。

 

來自:https://coyee.com/article/11094-mapreduce-design-patterns

 

 本文由用戶 langbo213 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!