一個例子解釋MapReduce計算模型

最近在學習關於Hadoop相關的知識,瞭解到了MapReduce這個優秀的編程模型。MapReduce是一個分析和處理大量數據的通用的解決方案,它許多的底層的細節處理,比如說數據切分,任務調度,存儲,容錯等這些對使用者來說是透明的,因此我們可以很方便的編寫代碼來並行的分析處理海量的數據。這個模型就是把一個大的任務劃分成若干小的任務然後在不同的計算機中並行處理,最後化簡合併得到一個結果,從而充分的利用集羣中的存儲和計算資源在一個合理的時間內完成大量數據的分析和處理任務。個人覺得這一處理過程有點像歸併排序(雖然不是很嚴謹嘿嘿)的處理的特點。一個比較經典的例子就是文本的單詞計數,比如說在文本檢索領域我們通常會需要計算詞頻(TF),文檔頻率(DF)等都會用到這個。圖1是這個例子的簡單的數據流向圖。


爲了更通俗易懂的解釋這個編程模型,我想出了一個感覺比較好的例子(可能不是很嚴謹),使得沒有相關知識的人也能明白這種通用的並行計算模型。假如我有一批貨物100噸要從A地運往B地,這時我有兩種方式可以選擇:
1)串行運輸:全程只派一輛車運貨,貨車載重量爲25噸,則把所有貨物從A運到B需要4趟。如圖2 所示。

一個例子解釋MapReduce計算模型
2)並行運輸:全程派4量車同時運輸,反正成本差不多,而且道路這麼寬。如圖3 所示。

一個例子解釋MapReduce計算模型
但是比較這兩種方式的物流可知,單純從運費來看,兩者都差不多,即消耗的硬件資源是一樣的,因爲從整體來看,都只運輸了4趟。但是並行運輸方式要高效得多,運輸所擁用時間基本上節約了3倍。而且假如串行運輸方式中貨車中途壞了,我們還必須忍受等它修好然後繼續完成任務,這種方式是無法保證時間的,因爲修車可能會花很多時間。但是對於並行運輸方式,如果有一輛車壞了,我們可以等它修好後繼續運輸,還可以等從其它運輸完的貨車中再次調度一輛替代壞得貨車完成任務,這種方式具有更大的靈活性,而且能保證任務能在一定時間範圍內完成(最壞情況就是和一輛車運輸的總時間一樣),除非4輛車都壞了(現實中這種可能性很小)。這就是並行運輸的好處。
總而言之,MapReduce計算模型使得大數據的處理分析變得容易快速,充分利用集羣中計算機的計算能力,協同完成整個大的任務。當然它也有自己的不足之處,比如它在處理大量的小數據會顯得力不從心。所以我們要首先弄明白自己的需求然後在選擇合適的方法,這樣纔會打到預期的效果。



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