hadoop mapreduce 是google mapreduce的乙個開源實現。
1、mapreduce並行程式設計抽象模型
① 面向大規模資料處理,mapreduce 採用了對資料「分而治之」的方法來完成並行化的大資料處理。
mapreduce在總結了典型的順序式大資料處理過程和特徵的基礎上,提供了乙個抽象模型,並借助與函式式設計語言lisp的設計思想,用map和reduce函式提供了兩個層次的並行程式設計抽象模型和介面,程式設計師只要實現者兩個基本介面即可快速完成並行化程式的設計。
②mapreduce定義了如下的map和reduce兩個抽象的程式設計介面,由使用者去程式設計實現:
map: (k1,v1)--->[k2,v2]
其中,輸入引數:鍵值對(k1;v1)表示的資料。響應的處理邏輯是: 乙個資料記錄(如文字檔案中的一行,或資料**中的一行)將以「鍵值對」的形式傳入map函式;map函式將處理這些鍵值對,並以另一種鍵值對形式輸出一組對表示的中間結果【(k2,v2)】。
③reduce: (k2;[v2]) --->[(k3;v3)]
其中,輸入引數是由map函式輸出的一組中間結果鍵值對(k2;【v2】),所以傳入reduce函式時會將具有相同主鍵k2下的所有值v2合併到乙個集合處理。相應的處理邏輯是:對map輸出的這組中間結果鍵值對,將進一步進行某種整理計算,最終輸出為某種形式的結果鍵值對 【(k3;v3)】
經過上述②③ 的map和reduce的抽象後,mapreduce將演化為如下平行計算模型:
並行程式設計的基本處理過程如下:
1)各個map節點對所劃分的資料進行並行處理,從不同的輸入資料產生的相應的中間結果輸出
2)各個reduce節點也各自進行平行計算,各自負責處理不同的中間結果資料集合。
3)進行reduce處理之前,必須等到所有的map節點處理完,因此,在進入reduce前需要有乙個同步障(barrier);這個階段也負責對map的中間結果資料進行收集整理(aggregation & shuffle)處理,以便reduce節點可以完全基於本節點上的資料計算最終結果。
4)彙總所有reduce的輸出結果即可獲得最終結果。
④combiner
對於(text3,「good weather is good」),輸出: (good,1),(weather,1),(is,1),(good,1). 有兩個(good, 1)鍵值對,而將這兩個相同的主鍵的鍵值對直接傳輸給reduce,顯然會增加不必要的網路資料傳輸,如果處理的是巨量的鍵值對直接傳輸給reduce ,顯然會增加不必要的網路資料傳輸。
把2個(good ,1)合併成(good,2),以此大大減少需要傳輸的中間結果資料量,達到網路資料傳輸優化
為了完成這種中間結果資料傳輸的優化,mapreduce框架提供了乙個稱之為combiner的物件專門負責處理這個事情,其主要作用就是進行中間結果資料網路傳輸的優化工作。combiner程式的執行實在map節點完成計算後,輸出中間結果之前。
⑤partitioner
為了保證所有的主鍵相同的鍵值對傳輸給同乙個reduce節點,以便reduce節點能在不需要訪問其他reduce節點的情況下,一次性順利統計出所有的詞頻,我們需要對即將傳入reduce節點的中間結果鍵值對進行恰當的分割槽處理(partitioning)。
mapreduce專門提供了乙個partitoner類來完成這個工作,主要目的就是消除資料傳入reduce節點後帶來不必要的相關性。
這個分割槽的過程是在map節點到reduce節點中間的資料整理階段完成的,具體來書,是在map節點輸出後,傳入reduce節點之前完成的。
加入combiner和partitioner後的程式設計模型。
hadoop map reduce 階段筆記
shuffle and sort mr 框架保證 每個 reducer 的輸入都是按照 key 鍵排過序的。shuffle 將map輸出結果送到reducer和排序的功能。1 map 每個map task將結果輸出到環形記憶體緩衝區,當到達一定閾值,則啟動乙個後台程序將快取中的資料 1 按照 red...
Hadoop MapReduce 效能優化
我們時常談論說到mapreduce時,我們都會說它是離線計算框架,磁碟io開銷大,job執行比較慢等等。這一篇部落格,南國系統回顧下mr程式執行慢的原因,以及如何優化mr程式。我們都知道mapreduce是離線計算框架,不同於spark記憶體計算框架模型。乙個標準的mr程式由map方法和reduce...
九 hadoop mapreduce分割槽
一 什麼時候分割槽?1 分割槽的實現 通過繼承partitioner類,實現getpartition方法。public int getpartition key key,value value,int reducetasknumber map結束後得到的每個key value都呼叫該方法,並把key...