Map-Reduce是一種可擴展的編程模型,可簡化數據的分布式處理。 Map-Reduce包括三個主要步驟:Map,shuffle,Reduce。
Map-Reduce工作的一個簡單解釋是:它將一個大型任務“委派”給一群人,然后將每個人的努力結果相結合,以產生最終結果。
讓我們舉個例子來說明一下。你剛剛在你的辦公室聽到這個好消息,并為所有的同事們舉行派對!你決定煮面食吃飯。你的四個朋友,喜歡烹飪,也愿意加入你。準備面食的任務涉及剁蔬菜,烹飪和裝盤。
我們來剁蔬菜,這里的生蔬菜就像輸入數據,你的朋友相當于計算節點(Compute nodes),而最終切好的蔬菜類似于結果。每個朋友都分配了洋蔥,西紅柿和辣椒,以剁碎和稱重。
你也想知道你在廚房里有多少蔬菜類型。您也想在這種計算過程中切斷這些蔬菜。最后,同一類的蔬菜應該在一個大碗里,標簽上顯示其重量等信息。
Map
你的朋友使用他們的“處理能力(compute power)”來切蔬菜并稱重。 他們需要確保不混合不同類型的蔬菜。 所以每個朋友都會生成一個<key,value>映射。每一個映射對應一小碗蔬菜。
Friend X:
<tomatoes, 5 lbs>
<onions, 10 lbs>
<garlic, 2 lbs>
Friend Y:
<onions, 22 lbs>
<green peppers, 5 lbs>
…
Shuffle
這個階段也叫做分組。 在這里,你想按照類型蔬菜給蔬菜分組。 您將廚房的不同部分分配給每種蔬菜類型,您的朋友應該對碗進行分組,以便將產品放在一起:
North End of Kitchen:
<tomatoes, 5 lbs>
<tomatoes, 11 lbs>
West End of Kitchen:
<onions, 10 lbs>
<onions, 22 lbs>
<onions, 1.4 lbs>
East End of Kitchen:
<green peppers, 3 lbs>
<green peppers, 10 lbs>
你被朋友通過Mapping and Grouping完成的工作給震撼了!廚房看起來更加有組織。 這個任務的最后階段是衡量你實際擁有的每種蔬菜的數量。 這讓我們進入了Reduce階段。
Reduce
在這個階段,你要求你的朋友收集相同類型的物品,把它們放在一個大碗中,并用大量的碗重量標注這個大碗。 你的朋友立即開始“減少”小碗。 最后,你就有了一堆標注良好的大碗。
<tomatoes, 16 lbs>
<green peppers, 13lbs>
<onions, 33.4 lbs>
總結
您的朋友(“計算節點”)剛剛執行了Map-Reduce任務,以幫助您開始烹飪。 由于您正在協調整個練習,所以您是此Map-Reduce任務的“Master”節點。 你的每個朋友都在不同的時間擔任Mappers, Groupers ,Reducers的角色。 此示例演示了MapReduce的強大功能。
由Yanring翻譯自http://words.sdsc.edu/words-data-science/mapreduce