MapReduce: Simplified DataProcessingonLargeClusters閱讀筆記

論文地址

https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/mapreduce-osdi04.pdf

一、背景

在閱讀這篇論文之前,需要了解以下概念。

1、數據密集型應用 vs 計算密集型應用

數據密集型應用大概就是數據量很大但計算邏輯比較簡單地應用,如大數據量的排序。而計算密集型應用則相反,其大部分時間用來做計算、邏輯判斷等CPU操作,如一個計算圓周率到小數點後一千位以下的程序就是計算密集型應用。計算密集型應用相關的概念有高性能計算、超級計算、網格計算等。

兩者都是基於分佈式,但兩者又存在區別。傳統的計算密集型應用往往通過並行計算方式,在緊耦合的超級計算機上運行少量計算作業,即一個作業同時佔用大量的計算機節點。而數據密集型應用則通常是將大量獨立的數據分析處理作業分佈在鬆耦合的計算機集羣的不同節點上運行,有高度密集的海量數據I/O吞吐需求,並且大部分數據密集型應用都有個數據流驅動的流程。

關於數據密集型應用的知識可以看下面這本書:

https://book.douban.com/subject/30329536/

https://github.com/Vonng/ddia

2、分佈式、並行、併發

分佈式:在計算機發展階段的早期,我們主要靠大型機、小型機實現高性能計算,當時的思路非常簡單,就是不斷升級計算機的硬件來提升性能。但是,隨着時間的推移,機器的升級帶來的性能提升已經越來越不明顯。這時有人就開始用性能一般的PC機組成規模很大的集羣,然後用來進行實現高性能計算,這其實就是分佈式計算的概念。比如,我們在使用谷歌搜索引擎的時候面對的是一臺抽象的邏輯的服務器,但事實上我們的搜索結果是內部無數計算機協同工作的產出。與分佈式對應的是單機,比如我們的個人PC就可以看成一個單機系統,具有一定的計算、存儲等資源。

並行:在只有單核CPU的時代,並行應該說與分佈式是緊密聯繫的,可以說並行是分佈式裏面的一個概念,因爲並行是以分佈式爲前提,而分佈式並不一定在做並行計算,舉個不是很嚴謹的例子,假設淘寶有10臺服務器在支撐用戶瀏覽商品,有10臺服務器在響應用戶下單支付等請求,這20臺服務器是一個分佈式系統,當兩個子集羣整體分別在響應某個用戶的請求時,子集羣內部是並行計算,服務器同時運作、一起處理一件任務,而子集羣之間則不是並行計算。

不過隨着多核CPU的出現,由於不同核心可以同時執行計算任務,所以一臺計算機也可以實現並行計算了。

併發:在單核CPU的計算機中,操作系統爲了實現多任務,採用時間片機制,在不同的時間片執行不同應用程序,這樣就可以實現多個應用程序“同時”進行了,也就是“並行”。不過這種“並行”只是表面上的“並行”,實際上任意時刻CPU都只處理一件任務。

小結:分佈式系統就是一個系統在物理上被分拆成幾個不同的部分,但這幾個部分能協同工作,使得用戶感覺自己仍然在使用一個系統;並行就是

3、摩爾定律的失效以及單核CPU向多核CPU的發展

意味着編程方式的轉變:由順序編程轉向並行編程

一、什麼是MapReduce?MapReduce可以做什麼?

MapReduce是一種編程模型,在這個模型下,計算過程被分解爲map(映射)、reduce(規約)兩個抽象的階段;

MapReduce也是一個分佈式並行計算框架,這個框架提供了一套簡單但是功能強大的接口,利用這套接口我們可以輕鬆實現自動並行化、大規模分佈式計算、在商用PC的大型集羣上實現高性能。這套框架的優點在於,隱藏了底層凌亂的並行化、容錯、數據分佈、負載均衡等等細節,沒有分佈式並行應用經驗的程序員只需要寫map、reduce兩個計算邏輯,就可以輕鬆寫出分佈式應用。

MapReduce可用於處理大規模數據集的運算,也就是可用來實現數據密集型應用。

二、MapReduce是如何工作的?()

 

三、MapReduce的編程思想

分而治之

 

四、MapReduce的優化

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章