簡介:
每一項新技術都是為了解決某個痛點,隨著數(shù)據(jù)量指數(shù)型得增長,面對海量的數(shù)據(jù)技術,雖然存儲用 Hadoop 的 HDFS 文件系統(tǒng)解決,但沒初加工的數(shù)據(jù)如同一堆剛從礦場運出來的礦砂,價值度低。
那么該如何處理海量的數(shù)據(jù)呢,比如分析某個時間段訂單量 / 某個地區(qū)的幾十年的溫度?為了解決這個問題,不得不介紹 Map reduce 這個框架。
一 、Mapreduce 簡單介紹
官話:MapReduce 是一個分布式計算模型框架,由兩個階段組成:Map和Reduce。
主要用于搜索領域,解決海量數(shù)據(jù)的計算問題,只需要實現(xiàn) Map() 和 Reduce() 兩個函數(shù)即可。
通俗理解:
好比家里一堆家務活,全部給一個人做可能一整天都弄不完,于是分工,老二(Map)負責清洗碗筷,老幺(Map)負責拖地,于是很快就搞定了;老大負責檢查(Reduce 匯總)。這就是MapReduce 把任務分解再匯總。
二、Mapreduce 工作(流程)原理
我分兩個版本解讀,第一個是正式版,第二個是故事版
正式版例子


粗略的講,MapReduce 的工作流程分為:map task( Map 任務) 與 reduce task(Reduce 任務)。
map task:
1、把一個(或多個)需要處理的文件(block) 按 spill 切分并啟動對應 map , 然后輸出到一個環(huán)形內(nèi)存緩沖區(qū),用于存儲任務的輸出。
當內(nèi)存緩沖區(qū)到闕值(0.8)時,會把內(nèi)容寫到磁盤的指定目錄下的新建的一個溢出寫文件。
注意:一個 spill (切片)對應一個 map task。,map task 的并發(fā)數(shù)量是由 spill 決定的。
2、寫磁盤前,要 partition (分區(qū)),sort (排序)。如果有 combiner(相同 key 的 map ),combine(合并) 排序后數(shù)據(jù)。
3 、等最后記錄寫完,合并全部溢出寫文件為一個分區(qū)且排序的文件。
reduce task
1、Reducer 通過 Http 方式得到輸出文件的分區(qū)。
2、TaskTracker 為分區(qū)文件運行 Reduce 任務。復制階段把 Map 輸出的復制到 Reducer 的內(nèi)存或磁盤。一個 Map 任務完成,Reduce 就開始復制輸出。
3 、排序階段合并 map 輸出,然后走 Reduce 階段。
故事版本
以生活的場景為例子,一個餐廳進了一批食材(input),不同的廚師去拿(Split)對應的食材切碎(Map),切碎之后就放到不同的機器上(烤箱 冷藏柜)(Shuffle 洗牌),然后顧客來會點不同的食物,服務員會給他們組裝(Reduce),最后交給顧客(Output / Finalize)。

三 、應用場景
Map Reduce 就是一種分治思想,把大問題分解成小問題,各個擊破,那么應用場景呢?
1、統(tǒng)計單詞數(shù)
2、建立倒排索引
3、統(tǒng)計用戶(手機號碼)的流量
4、計算 URL 的訪問頻率
。。。。。。。。。。。
四、思考題:
Combiner / Partitioner 的作用是什么,應用場景是什么以及 Shuffler 的過程是怎么樣的?
微信搜索公眾號「一起學大數(shù)據(jù)呀」,里面有更多學習資料