mapreduce 做什麼以及如何做

Mapreduce 是一種程式設計模型,用於處理(非常)大量資料。

傳統的 HPC(高效能運算)通過建立一組高度連線的計算機(使用諸如極快的網路,快速訪問共享儲存,共享記憶體等)來處理計算問題,從而加快了對相對大量資料的大量計算。通常需要計算才能訪問彼此的資料。一個典型的例子是天氣預報。

另一方面,Mapreduce 擅長處理大量資料的相對較小的獨立計算。為了實現這一點,資料分佈在許多計算機上(由於資料量),並且所需的計算被分成可以獨立地對每個資料位進行的階段(對映階段)。然後收集這些獨立計算的結果,並進行第二部分計算以將所有這些單獨的結果組合成最終結果(減少階段)。

示例:計票

想象一下,你有很多的選票需要計算,並且每項投票都需要做一些工作(例如,從掃描的影象中找出哪個框被勾選)。

在這種情況下,mapreduce 實現將:

第 1 步:‘傳播’

傳播影象以通過可用計算機進行處理。

第 2 步:‘地圖’

在每臺計算機上,為每個影象:

  • 將複製到此計算機的 1 個影象作為輸入
  • 找出哪個方框被勾選了
  • 輸出投票的專案的編號(或程式碼或名稱)

請注意,只要計算機獲得 1 張影象,就可以開始工作。所有這些計算機都不需要進行互動來完成工作,因此不需要快速互連,共享記憶體或共享磁碟空間。

第 3 步:‘聚集’

在 1 臺計算機上收集所有這些輸出。

第 4 步:‘減少’

計算每個數字(或程式碼或名稱)的投票數。

這個非常基本的例子也強調了如何進一步優化。在這種情況下,減少步驟本身可以在每臺計算機上清楚地完成,然後可以在中央計算機上完成最終的減少。這將減少執行 reduce 步驟的一臺計算機上的工作量,並限制需要通過網路傳輸的資料量。

示例:計數投票 - 優化(通過使用組合器)

第 1 步:‘傳播’

與以前相同:傳播影象以通過可用計算機進行處理。

第 2 步:‘地圖’

與以前相同:在每臺計算機上,對於每個影象:

  • 將複製到此計算機的 1 個影象作為輸入
  • 找出哪個方框被勾選了
  • 輸出投票的專案的編號(或程式碼或名稱)

第 3 步:在當地聚集

在計算機上收集 1 臺計算機的所有輸出。

第 4 步:在本地’減少'

計算本地結果中每個數字(或程式碼或名稱)的投票數,並輸出這些計數。

第五步:全域性’聚集'

在 1 臺計算機上收集本地的所有輸出。

第 6 步:全域性’減少'

總結每個數字(或程式碼或名稱)的本地投票數。

請注意,在步驟 3 中,沒有必要等待以下任何情況下的所有結果:

  • 如果這對於計算機本地資源(如儲存/記憶體)來說太多了
  • 如果計算機發生故障時重做工作的成本被認為是大的等待所有本地結果
  • 如果網路現在可以自由傳輸中間結果

到目前為止,在本地計算機上生成的結果可以進行本地收集和本地縮減,這可以隨時進行。

區域性減少步驟稱為組合器步驟。這是用於提高效能的可選步驟。