Hadoop 學習筆記 05 之 MapReduce 淺析

簡介:

每一項新技術都是為了解決某個痛點,隨著數(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ù)呀」,里面有更多學習資料

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容