乙個例子解釋MapReduce計算模型

2021-07-05 15:49:52 字數 1240 閱讀 7785

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

為了更通俗易懂的解釋這個程式設計模型,我想出了乙個感覺比較好的例子(可能不是很嚴謹),使得沒有相關知識的人也能明白這種通用的平行計算模型。假如我有一批貨物100噸要從a地運往b地,這時我有兩種方式可以選擇:

1)序列運輸:全程只派一輛車運貨,貨車載重量為25噸,則把所有貨物從a運到b需要4趟。如圖2 所示。

2)並行運輸:全程派4量車同時運輸,反正成本差不多,而且道路這麼寬。如圖3 所示。

但是比較這兩種方式的物流可知,單純從運費來看,兩者都差不多,即消耗的硬體資源是一樣的,因為從整體來看,都只運輸了4趟。但是並行運輸方式要高效得多,運輸所擁用時間基本上節約了3倍。而且假如序列運輸方式中貨車中途壞了,我們還必須忍受等它修好然後繼續完成任務,這種方式是無法保證時間的,因為修車可能會花很多時間。但是對於並行運輸方式,如果有一輛車壞了,我們可以等它修好後繼續運輸,還可以等從其它運輸完的貨車中再次排程一輛替代壞得貨車完成任務,這種方式具有更大的靈活性,而且能保證任務能在一定時間範圍內完成(最壞情況就是和一輛車運輸的總時間一樣),除非4輛車都壞了(現實中這種可能性很小)。這就是並行運輸的好處。

總而言之,mapreduce計算模型使得大資料的處理分析變得容易快速,充分利用集群中計算機的計算能力,協同完成整個大的任務。當然它也有自己的不足之處,比如它在處理大量的小資料會顯得力不從心。所以我們要首先弄明白自己的需求然後在選擇合適的方法,這樣才會打到預期的效果。

LineDDA的乙個例子

unit unit1 inte ce uses windows,messages,sysutils,variants,classes,graphics,controls,forms,dialogs,extctrls,stdctrls,buttons type tfmmain class tform ...

SQL GROUP CONCAT的乙個例子

我有乙個這樣的資料庫 user info 現在有乙個需求是把這樣 9 條記錄按照 username 來 group 成3條記錄 目標 shu female 201 lee male 202 yuki female 181 如果用select from user info group by usern...

explode的乙個例子

select level as level,explode split 1,2,3 as value 可以生成結果 level value level 1 level 2 level 3 lateral view 1.lateral view 用於和udtf函式 explode,split 結合來使...