初步認識MapReduce

2021-09-25 18:55:47 字數 1507 閱讀 5437

mapreduce是hadoop的一種分布式計算框架,用於大規模的平行計算。

mapreduce的工作階段可以分為map階段reduce階段,這也是mapreduce名字的由來,每乙個階段都是以鍵值對(key/value)作為輸入和輸出。

在實際程式設計中,底層的東西框架已經幫我們寫好了,我們只要定義map和reduce任務,實現幾個介面就好了。

如上圖所示,mapreduce的執行過程按照時間順序可以分為:

i np

ut⟶m

ap⟶s

huff

le⟶r

educ

e⟶ou

tput

input\longrightarrow map\longrightarrow shuffle\longrightarrow reduce\longrightarrow output

input⟶

map⟶

shuf

fle⟶

redu

ce⟶o

utpu

tinput

在進行map運算前,mapreduce會根據輸入檔案計算輸入分片(input split),每個輸入分片對應乙個map任務。

input split 和 blocks

輸入分片儲存的並非資料本身,而是乙個分片的長度和記錄資料位置的陣列。前面hdfs的部落格,我們談到了資料塊(blocks)的概念,實際上分片的數量跟資料塊的數量是有聯絡的。

假設我們使用的是hadoop 2.x以後的版本,每個資料塊的大小為128mb。我們在輸入兩個大小分別為100mb和200mb的檔案時,mapreduce會把100mb的檔案分進乙個輸入分片,而200mb的檔案需要兩個輸入分片,然後我們將會有3個map任務將被執行,而且每個map執行的資料大小不均,這也是mapreduce優化計算的乙個關鍵點。

mapmap的本質是分割,將分割好的資料通過我們定義的對映函式來產生輸出。

後面我們將會舉乙個具體的例子來說明:統計出現的每個單詞的數量。

shuffle

shufflle的過程是maphereduce的中間過程,主要實現3大功能:分割槽、分組和排序。

reduce

reduce的本質是聚合,和map是對應關係。經過合併後的鍵值對,按照我們定義的邏輯關係,生產另一系列的鍵值對。

output

將reduce輸出的鍵值對儲存在hdfs上。

結合乙個例項來解釋mapreduce的工作過程:

具體**實現等可以看我的另一篇部落格python實現mapreduce的wordcount例項.

參考資料

hadoop 學習筆記:mapreduce框架

map reduce 過程的認識

map reduce 過程的認識 最初我一直簡單的以為map 的工作就是將資料打散,而reduce 就是將map 打散後的資料合併。雖然之前跑過wordcount 的例子,但之前只是對輸出reduce 最終的結果感興趣,對控制台列印的日誌資訊完全不懂。這幾天我們團隊在探索pagerank 才開始對m...

初步認識繼承

include stdafx.h include using namespace std 構造方式跟類內類物件是一樣的 父類 info 派生類 sci 派生類 sci 父類 info struct info 父類 void outputinfo info info private int numb ...

初步認識redis

1.什麼redis 2.為什麼使用redis 3.什麼場合使用redis 4.redis的好處 5.編譯安裝redis 6.redis資料結構 1.什麼是redis redis是remote dictionary server 遠端資料服務 的縮寫,是義大利人antirez開發的一款記憶體快取記憶體...