MapReduce執(zhí)行流程分析

一、大致流程

  • 這幅圖簡(jiǎn)單的描述了整個(gè)MapReduce的流程,忽略很多細(xì)節(jié),只保留核心思想。
    • 1、首先InputData要先上傳到HDFS上面,因?yàn)檎麄€(gè)MapReduce依賴(lài)于HDFS。
    • 2、InputFormat需要從HDFS上面讀取數(shù)據(jù),進(jìn)行數(shù)據(jù)處理,得到一系列data split。關(guān)于InputFormat,可以看第二幅圖:
      • InputFormat:MapReduce框架基礎(chǔ)類(lèi)之一。主要包含兩個(gè)操作:數(shù)據(jù)分隔:Data Splits,記錄讀取器:Record Reader。
      • Data Splits:如何將數(shù)據(jù)分片,例如可以規(guī)定多少行為一片。
      • Record Reader:如何讀取分片中的數(shù)據(jù),比如按行讀取。每讀取一條記錄,調(diào)用一次map函數(shù)。
    • 3、InputFormat最終會(huì)得到一系列data split,當(dāng)然data solit會(huì)有很多,而map節(jié)點(diǎn)則要少的多,如何均勻的分配這么多data split,當(dāng)然還是Hash算法.
    • 4、當(dāng)data split到達(dá)相應(yīng)的map,map通常是進(jìn)行數(shù)據(jù)加工的地方,因此我們會(huì)自己定義數(shù)據(jù)加工邏輯,然后以key value的形式進(jìn)行輸出,框架以制表符\t來(lái)區(qū)分key和value,因此我們經(jīng)常和\t面基╰(°▽°)╯。
    • 5、當(dāng)數(shù)據(jù)以(key,value) 的形式從map出來(lái)后,由圖一可知,這些鍵值對(duì)會(huì)經(jīng)過(guò)一個(gè)稱(chēng)為shuffle(洗牌)&sort的過(guò)程,而在圖二詳細(xì)的描述了這個(gè)過(guò)程,圖二的左邊是Mapper階段,右邊是Reducer階段,Mapper階段完成后,會(huì)告訴Reducer來(lái)取
      • shuffle:神奇發(fā)生的地方,性能優(yōu)化大有可為。由圖三可知Shuffle包含多個(gè)過(guò)程,其中第一個(gè)是Partitioner(分隔):
        • Partitioner:決定數(shù)據(jù)由哪個(gè)Reducer處理,從而分區(qū)。因?yàn)槲覀兛赡苡卸鄠€(gè)Reducer這是非常有必要的,例如采用hash,可以對(duì)key取模,決定哪一個(gè)key由哪一個(gè)Reducer來(lái)處理。
        • MemoryBuffer:內(nèi)存緩沖區(qū),每個(gè)map的結(jié)果和partition處理的 key value結(jié)果都保存在緩存中 。
        • Spill:內(nèi)存緩沖區(qū)達(dá)到閾值時(shí),溢寫(xiě)spill線(xiàn)程鎖住這80M 的緩沖區(qū),開(kāi)始將數(shù)據(jù)寫(xiě)出到本地磁盤(pán)中,然后釋放內(nèi)存。每次溢寫(xiě)都生成一個(gè)數(shù)據(jù)文件。溢出的數(shù)據(jù)到磁盤(pán)前會(huì)對(duì)數(shù)據(jù)進(jìn)行key排序sort,以及合并combiner。
          注意,溢出的數(shù)據(jù)到磁盤(pán)前會(huì)對(duì)數(shù)據(jù)進(jìn)行key排序sort,這是框架會(huì)自動(dòng)做的

          發(fā)現(xiàn)相同Reduce的key數(shù)量,會(huì)拼接到一起,減少 partition的索引數(shù)量。
    • 6、經(jīng)過(guò)Spill的過(guò)程,這無(wú)疑會(huì)生成許多小文件,因此后面還會(huì)有一個(gè)merge on disk,會(huì)將一個(gè)mapper上面生成的小文件根據(jù)partitions合并成一個(gè)大文件。這在圖二由詳細(xì)的描述。
    • 7、然后繼續(xù)看圖二,還會(huì)有一個(gè)fetch(取來(lái))的過(guò)程,這時(shí)Copy phase階段典型操作,它會(huì)根據(jù)partition,將各個(gè)Mapper上面對(duì)應(yīng)的Reduce應(yīng)該處理的數(shù)據(jù)(key,value)copy到對(duì)應(yīng)的Reduce,上圖只給出了一個(gè)Mapper和Reducer。
    • 8、然后還會(huì)有一系列merge和sort,通過(guò)對(duì)key排序,將數(shù)據(jù)整合給Reduce處理,Reduce處理的過(guò)程和Mapper階段類(lèi)似,面對(duì)大量數(shù)據(jù)當(dāng)然也會(huì)有:MemoryBuffer,Spill & Sort過(guò)程。
    • 9、Reduce: 多個(gè)reduce任務(wù)輸出的數(shù)據(jù)都屬于不同的 partition,因此結(jié)果數(shù)據(jù)的key不會(huì)重復(fù)。合并reduce的輸出文件即可得到最終的結(jié)果。

注意:

  • 在顧及每個(gè)Mapper和Reducer處理的過(guò)程的細(xì)節(jié)的時(shí)候,還要跳出來(lái),以全局的視角(即系統(tǒng)中會(huì)有多個(gè)Mapper和Reducer)觀察思考,為什么設(shè)計(jì)的這么復(fù)雜。

相關(guān)圖示

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

相關(guān)閱讀更多精彩內(nèi)容

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