簡(jiǎn)介:
每一項(xiàng)新技術(shù)都是為了解決某個(gè)痛點(diǎn)恤筛,隨著數(shù)據(jù)量指數(shù)型得增長(zhǎng)箭窜,面對(duì)海量的數(shù)據(jù)技術(shù)济似,雖然存儲(chǔ)用 Hadoop 的 HDFS 文件系統(tǒng)解決猖凛,但沒(méi)初加工的數(shù)據(jù)如同一堆剛從礦場(chǎng)運(yùn)出來(lái)的礦砂赂蠢,價(jià)值度低。
那么該如何處理海量的數(shù)據(jù)呢辨泳,比如分析某個(gè)時(shí)間段訂單量 / 某個(gè)地區(qū)的幾十年的溫度虱岂?為了解決這個(gè)問(wèn)題,不得不介紹 Map reduce 這個(gè)框架菠红。
一 第岖、Mapreduce 簡(jiǎn)單介紹
官話:MapReduce 是一個(gè)分布式計(jì)算模型框架,由兩個(gè)階段組成:Map和Reduce试溯。
主要用于搜索領(lǐng)域蔑滓,解決海量數(shù)據(jù)的計(jì)算問(wèn)題,只需要實(shí)現(xiàn) Map() 和 Reduce() 兩個(gè)函數(shù)即可。
通俗理解:
好比家里一堆家務(wù)活键袱,全部給一個(gè)人做可能一整天都弄不完燎窘,于是分工,老二(Map)負(fù)責(zé)清洗碗筷蹄咖,老幺(Map)負(fù)責(zé)拖地荠耽,于是很快就搞定了;老大負(fù)責(zé)檢查(Reduce 匯總)比藻。這就是MapReduce 把任務(wù)分解再匯總铝量。
二、Mapreduce 工作(流程)原理
我分兩個(gè)版本解讀银亲,第一個(gè)是正式版慢叨,第二個(gè)是故事版
正式版例子
粗略的講,MapReduce 的工作流程分為:map task( Map 任務(wù)) 與 reduce task(Reduce 任務(wù))务蝠。
map task:
1拍谐、把一個(gè)(或多個(gè))需要處理的文件(block) 按 spill 切分并啟動(dòng)對(duì)應(yīng) map , 然后輸出到一個(gè)環(huán)形內(nèi)存緩沖區(qū)馏段,用于存儲(chǔ)任務(wù)的輸出轩拨。
當(dāng)內(nèi)存緩沖區(qū)到闕值(0.8)時(shí),會(huì)把內(nèi)容寫(xiě)到磁盤的指定目錄下的新建的一個(gè)溢出寫(xiě)文件院喜。
注意:一個(gè) spill (切片)對(duì)應(yīng)一個(gè) map task亡蓉。,map task 的并發(fā)數(shù)量是由 spill 決定的喷舀。
2砍濒、寫(xiě)磁盤前,要 partition (分區(qū))硫麻,sort (排序)爸邢。如果有 combiner(相同 key 的 map ),combine(合并) 排序后數(shù)據(jù)拿愧。
3 杠河、等最后記錄寫(xiě)完,合并全部溢出寫(xiě)文件為一個(gè)分區(qū)且排序的文件浇辜。
reduce task
1券敌、Reducer 通過(guò) Http 方式得到輸出文件的分區(qū)。
2奢赂、TaskTracker 為分區(qū)文件運(yùn)行 Reduce 任務(wù)陪白。復(fù)制階段把 Map 輸出的復(fù)制到 Reducer 的內(nèi)存或磁盤。一個(gè) Map 任務(wù)完成膳灶,Reduce 就開(kāi)始復(fù)制輸出咱士。
3 立由、排序階段合并 map 輸出,然后走 Reduce 階段序厉。
故事版本
以生活的場(chǎng)景為例子锐膜,一個(gè)餐廳進(jìn)了一批食材(input),不同的廚師去拿(Split)對(duì)應(yīng)的食材切碎(Map)弛房,切碎之后就放到不同的機(jī)器上(烤箱 冷藏柜)(Shuffle 洗牌)道盏,然后顧客來(lái)會(huì)點(diǎn)不同的食物,服務(wù)員會(huì)給他們組裝(Reduce)文捶,最后交給顧客(Output / Finalize)荷逞。
三 、應(yīng)用場(chǎng)景
Map Reduce 就是一種分治思想粹排,把大問(wèn)題分解成小問(wèn)題种远,各個(gè)擊破,那么應(yīng)用場(chǎng)景呢顽耳?
1坠敷、統(tǒng)計(jì)單詞數(shù)
2、建立倒排索引
3射富、統(tǒng)計(jì)用戶(手機(jī)號(hào)碼)的流量
4膝迎、計(jì)算 URL 的訪問(wèn)頻率
。胰耗。限次。。宪郊。掂恕。。弛槐。。依啰。乎串。
四、思考題:
Combiner / Partitioner 的作用是什么速警,應(yīng)用場(chǎng)景是什么以及 Shuffler 的過(guò)程是怎么樣的叹誉?
微信搜索公眾號(hào)「一起學(xué)大數(shù)據(jù)呀」,里面有更多學(xué)習(xí)資料