快結課了,該寫個總結了。
mapreduce是兩個操作步驟,即映射和規(guī)約 也是這個分布式計算的思想
主要過程是這樣的:
即實現一個指定的Map映射函數,用來把一組鍵值對映射成新的鍵值對,再把新的鍵值對發(fā)送個Reduce規(guī)約函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組
特點就是:
分不可靠 MP
通過把對數據的大規(guī)模操作分發(fā)給通信網絡上對每個節(jié)點,每個節(jié)點會周期性的返回它所完成的工作和最新狀態(tài),如果一個節(jié)點沉默時間超過預設的時間間隔,主節(jié)點會認為這個節(jié)點掛掉了,并會把原來分配在這個節(jié)點上的數據,重新分發(fā)給新的節(jié)點,保證數據不丟失。
用途:
分不排序,web連接圖翻轉,web的訪問日志分析,文檔聚類,機器學習,統(tǒng)計分析等
MapReduce提供了以下的主要功能:
1)數據劃分和計算任務調度:
系統(tǒng)自動將一個作業(yè)(Job)待處理的大數據劃分為很多個數據塊,每個數據塊對應于一個計算任務(Task),并自動調度計算節(jié)點來處理相應的數據塊。作業(yè)和任務調度功能主要負責分配和調度計算節(jié)點(Map節(jié)點或Reduce節(jié)點),同時負責監(jiān)控這些節(jié)點的執(zhí)行狀態(tài),并負責Map節(jié)點執(zhí)行的同步控制。
2)數據/代碼互定位:
為了減少數據通信,一個基本原則是本地化數據處理,即一個計算節(jié)點盡可能處理其本地磁盤上所分布存儲的數據,這實現了代碼向數據的遷移;當無法進行這種本地化數據處理時,再尋找其他可用節(jié)點并將數據從網絡上傳送給該節(jié)點(數據向代碼遷移),但將盡可能從數據所在的本地機架上尋找可用節(jié)點以減少通信延遲。
3)系統(tǒng)優(yōu)化:
為了減少數據通信開銷,中間結果數據進入Reduce節(jié)點前會進行一定的合并處理;一個Reduce節(jié)點所處理的數據可能會來自多個Map節(jié)點,為了避免Reduce計算階段發(fā)生數據相關性,Map節(jié)點輸出的中間結果需使用一定的策略進行適當的劃分處理,保證相關性數據發(fā)送到同一個Reduce節(jié)點;此外,系統(tǒng)還進行一些計算性能優(yōu)化處理,如對最慢的計算任務采用多備份執(zhí)行、選最快完成者作為結果。
4)出錯檢測和恢復:
以低端商用服務器構成的大規(guī)模MapReduce計算集群中,節(jié)點硬件(主機、磁盤、內存等)出錯和軟件出錯是常態(tài),因此MapReduce需要能檢測并隔離出錯節(jié)點,并調度分配新的節(jié)點接管出錯節(jié)點的計算任務。同時,系統(tǒng)還將維護數據存儲的可靠性,用多備份冗余存儲機制提高數據存儲的可靠性,并能及時檢測和恢復出錯的數據。
ps:以上的功能特性是百度的,我也不太懂 總有一天會懂的。
工作原理:
1..MapReduce庫先把用戶的輸入文件劃分為M份(M為用戶定義)現在一般默認為128Mb
假如將1G數據按照128mb的數據塊來劃分則 可以劃分為8塊
2用戶工程中的副本中有一個稱為master,其余稱為worker,master是負責調度的,為空閑worker分配作業(yè)(Map作業(yè)或者Reduce作業(yè)),worker的數量也是可以由用戶指定的。、
3.被分配了Map作業(yè)的worker,開始讀取對應分片的輸入數據,Map作業(yè)數量是由M決定的,和split一一對應;Map作業(yè)從輸入數據中抽取出鍵值對,每一個鍵值對都作為參數傳遞給map函數,map函數產生的中間鍵值對被緩存在內存中。
4..緩存的中間鍵值對會被定期寫入本地磁盤,而且被分為R個區(qū),R的大小是由用戶定義的,將來每個區(qū)會對應一個Reduce作業(yè);這些中間鍵值對的位置會被通報master,master負責將信息轉發(fā)給Reduce worker。
5.master通知分配了Reduce作業(yè)的worker它負責的分區(qū)在什么位置(肯定不止一個地方,每個Map作業(yè)產生的中間鍵值對都可能映射到所有R個不同分區(qū)),當Reduce
worker把所有它負責的中間鍵值對都讀過來后,先對它們進行排序,使得相同鍵的鍵值對聚集在一起。因為不同的鍵可能會映射到同一個分區(qū)也就是同一個Reduce作業(yè)(誰讓分區(qū)少呢),所以排序是必須的。
6.reduce worker遍歷排序后的中間鍵值對,對于每個唯一的鍵,都將鍵與關聯的值傳遞給reduce函數,reduce函數產生的輸出會添加到這個分區(qū)的輸出文件中。
7.當所有的Map和Reduce作業(yè)都完成了,master喚醒正版的user program,MapReduce函數調用返回user program的代碼。

工作流程圖

1. map任務處理
1.1讀取輸入文件內容,解析成key、value對。對輸入文件的每一行,解析成key、value對。每一個鍵值對調用一次map函數。
1.2
寫自己的邏輯,對輸入的key、value處理,轉換成新的key、value輸出。
1.3 對輸出的key、value進行分區(qū)。
1.4
對不同分區(qū)的數據,按照key進行排序、分組。相同key的value放到一個集合中。
1.5 (可選)分組后的數據進行歸約。
2.reduce任務處理
2.1
對多個map任務的輸出,按照不同的分區(qū),通過網絡copy到不同的reduce節(jié)點。
2.2
對多個map任務的輸出進行合并、排序。寫reduce函數自己的邏輯,對輸入的key、values處理,轉換成新的key、value輸出。
2.3 把reduce的輸出保存到HDFS文件中。
例子:實現WordCountApp

reducer

job

1.map 函數是對集合中的值進行操作,是對集合中元素操作,元素發(fā)生變化,但是,數量不變
執(zhí)行流程:
HDFS上的數據與map 任務溝通時 會被切分split ?一個split 對應一個map ,塊和split數目不一定相同,每一個reduce任務 對應一個文件。結果存放在目錄中
map任務運行在節(jié)點上(一個節(jié)點可以運行多個map任務,但是一個map任務不能跨多個節(jié)點上運行)reduce任務 與map 同理?進入map 鍵值對 k1 v1原始數據
k3 v3 是結果數據
k2 v2 是中間數據
某些類的數據,送到某些reduce中,這個過程被稱為shuffle——數據分配過程
map 和reducer 在為分布式下是在第一個節(jié)點的
map 任務數量 一般一個節(jié)點會有2個任務
輸出流 hdfs 完成
其實在Mr 中最難的就是對業(yè)務邏輯的理解,代碼都是死的。