Google MapReduce整理

一,基本瞭解程序員

1.MapReduce關心的是如何劃分超大集數據和在大量計算機組成的集羣上調度。算法

2.對於海量數據想在短期內完成處理,咱們只要簡單描述運算的規則,而不用關心並行,分佈,容錯,負載均衡等複雜細節。他的原理來源並不是沒有來源,是參考了一些函數語言的實用原理,都會有一組邏輯輸入用Map處理後獲得一組中間值,再Reduce合併中間數據,獲得一個想要的目的結果。數據庫

3.Map函數能夠合併相同k-v pair集合成一個較小的v集合。注意的是咱們能夠經過迭代的方式把v傳遞給Reduce函數,這樣就能夠處理沒法所有放入內存中的大量value值的集合了。編程

4.分佈式文件系統經過數據複製來保證在不一樣硬盤上數據的有效和可靠性。緩存

5.提交job,一個job包括一系列task,調度系統將任務調度到集羣多臺可用機器上(實際就是HDFS文件系統控制管理的分佈式文件系統)。儘可能讓調度算法和要計算的數據靠近。網絡

6.而後統計成中間pair,而後傳遞給reduce合併成結果集。數據結構

二,執行歸納併發

這個是比較核心的執行流程了。基本就是在集羣中建立多個工做副本,把map或reduce任務發送到空閒的worker執行。map能解析出key/pair對,而後傳遞給用戶自定義的map函數,按期輸出到緩存中(這個會進行分區),完畢後,master通知reduce讀取中間值,在排序後將key和value集合傳遞到reduce函數,處理後輸出爲分割的文件,做爲其餘的MapReduce過程的數據輸入和其餘分佈式的數據輸入。負載均衡

三,容錯框架

1.map處理完畢後會經過master逐步的推送給那些正在工做的reduce任務。

2.master能夠按期的ping worker看是否正常,worker完成的map任務會重設空閒裝填,會從新安排給worker,若是有worker失效,運行的map,reduce任務也將等待被被從新分配。map執行結果在執行的機器中,故障需從新執行。reduce輸出在全局文件系統,不須要從新執行。

3.由於前期的數據文件是已經被分割了的,因此只須要從新執行時效的map任務就能夠。(分工)

4.master會按期的寫一個checkpoint,若是master失效會從一個checkpoint恢復保存的worker和map,reduce數據結構。由於master進程比較重,失效的話會返回給用戶狀態,讓用戶決定是否從新執行map,reduce任務。

5.分佈式系統應該也是輸入肯定性函數。

6.map對應R個私有文件,reduce對應1個私有文件,完成map會通知master將數據記錄在數據結構中。

7.一個任務是可能在多個機器上執行的。如一個reduce任務在多個機器執行後會把臨時文件重命名爲一個文件(由文件系統保證)。較弱的失效處理沒太明白(先認爲通常狀況是非失效的)

四,存儲

1.存儲位置策略決定了網絡帶寬的利用,map任務調度時,會將任務先調度到HDFS副本輸入數據所在的機器上或附近機器上儘可能避免跨網絡形成大量傳輸數據。

2.M/R的數量有一個worker的均衡的比例。

3.備用任務是在接近M/R任務尾聲時,用備用master執行剩餘的任務,完成就完成。這樣能夠利用百分之幾的資源節省更多的時間。

五,技巧

1.在MAP執行完後再使用分區函數時的函數也能決定分區的位置。

2.對應按key隨機存取,有順序就變的有意義了。

3.combiner函數會在執行完map的機器上先合併一次數據結果真後發送給reduce函數,顯著的提升了執行的效率。

4.輸入/輸出類型,輸入能夠由一個reader來控制是從文件或數據庫讀取數據,或輸出一個用戶添加的類型。條件是能夠當成key/pair來處理數據。

5.反作用,若是是跨文件一致性要求的任務,必須是肯定性的任務。

6.master會記錄內存段或總bus中致使肯定性crush的記錄,下次執行時會跳過這些記錄。

7.map/reduce比較難debug,因此有一套Map/Reduce庫的本地實現版本。

8.狀態信息能夠記錄各個worker的任務狀況和進度,失效worker等,能夠估算時間和分析。

9.計數器能夠做爲合併的數據結果和執行完畢後結果驗證正確性。

10.對於中間排序會採樣key分佈狀況進行分區。

11.看到讀取時間少些,處理後就漸漸開始向reduce傳輸數據,有備份master節點的執行效率要好些。kill掉了幾個worker進程影響不是很明顯。

六,經驗

1.輸入數據本地化,動態負載均衡。

2.mapreduce的成功處在於1.能夠用mapreduce庫不到半小時寫一個簡單的程序,這個程序能夠在上千的機器上作大規模併發處理。2.可讓沒有分佈式併發開發經驗的程序員很容易利用大量資源開發併發分佈式應用程序。

3.容錯,分佈式,並行計算都是mapreduce提供的。

七,總結

1.mapreduce能夠當作是真實世界處理海量數據的經驗,是對經典模型的的簡化和萃取的成果。

2.對於容錯它作了上千臺機器集羣中的處理,而通常的是小規模集羣的還交給了程序員處理。

3.高級抽象模型限制編程模型,數據本地優化策略,備用機制和忽略故障,集羣機制,排序機制,編程模型縮短操做時間,

八,結束語

1.並行,容錯,數據本地化,負載均衡被封裝;沒有併發分佈能力的可使用;編程簡單;如排序搜索,數據挖掘,機器學習;解決了數千臺機器集羣上靈活部署運行MapReduce;簡單有效利用計算機資源解決須要大量計算的問題。這些思量都有一些其餘框架和應用思想的解決來源。

2.減小網絡帶寬,數據本地化(速度和網絡帶寬),重複執行相同任務(備用master接近完成時啓動執行,節省了資源利用不平衡問題。這個我以爲還不夠智能,由於只能是在接近完成,中間什麼地方出現問題可能就不容易進行了,目前可能嘗試過幾回也只能跳過了)。

相關文章
相關標籤/搜索