一眷细、大致流程
- 這幅圖簡(jiǎn)單的描述了整個(gè)MapReduce的流程拦盹,忽略很多細(xì)節(jié),只保留核心思想溪椎。
- 1普舆、首先InputData要先上傳到HDFS上面,因?yàn)檎麄€(gè)MapReduce依賴于HDFS校读。
- 2沼侣、InputFormat需要從HDFS上面讀取數(shù)據(jù),進(jìn)行數(shù)據(jù)處理歉秫,得到一系列data split蛾洛。關(guān)于InputFormat,可以看第二幅圖:
- InputFormat:MapReduce框架基礎(chǔ)類之一。主要包含兩個(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來區(qū)分key和value趁餐,因此我們經(jīng)常和\t面基╰(°▽°)╯。
- 5篮绰、當(dāng)數(shù)據(jù)以(key后雷,value) 的形式從map出來后,由圖一可知吠各,這些鍵值對(duì)會(huì)經(jīng)過一個(gè)稱為shuffle(洗牌)&sort的過程臀突,而在圖二詳細(xì)的描述了這個(gè)過程,圖二的左邊是Mapper階段贾漏,右邊是Reducer階段候学,Mapper階段完成后,會(huì)告訴Reducer來取:
- shuffle:神奇發(fā)生的地方纵散,性能優(yōu)化大有可為梳码。由圖三可知Shuffle包含多個(gè)過程,其中第一個(gè)是Partitioner(分隔):
- Partitioner:決定數(shù)據(jù)由哪個(gè)Reducer處理伍掀,從而分區(qū)掰茶。因?yàn)槲覀兛赡苡卸鄠€(gè)Reducer這是非常有必要的,例如采用hash蜜笤,可以對(duì)key取模濒蒋,決定哪一個(gè)key由哪一個(gè)Reducer來處理。
- MemoryBuffer:內(nèi)存緩沖區(qū)把兔,每個(gè)map的結(jié)果和partition處理的 key value結(jié)果都保存在緩存中 沪伙。
- Spill:內(nèi)存緩沖區(qū)達(dá)到閾值時(shí)瓮顽,溢寫spill線程鎖住這80M 的緩沖區(qū),開始將數(shù)據(jù)寫出到本地磁盤中焰坪,然后釋放內(nèi)存趣倾。每次溢寫都生成一個(gè)數(shù)據(jù)文件。溢出的數(shù)據(jù)到磁盤前會(huì)對(duì)數(shù)據(jù)進(jìn)行key排序sort某饰,以及合并combiner儒恋。
注意,溢出的數(shù)據(jù)到磁盤前會(huì)對(duì)數(shù)據(jù)進(jìn)行key排序sort黔漂,這是框架會(huì)自動(dòng)做的
發(fā)現(xiàn)相同Reduce的key數(shù)量诫尽,會(huì)拼接到一起,減少 partition的索引數(shù)量炬守。
- shuffle:神奇發(fā)生的地方纵散,性能優(yōu)化大有可為梳码。由圖三可知Shuffle包含多個(gè)過程,其中第一個(gè)是Partitioner(分隔):
- 6牧嫉、經(jīng)過Spill的過程,這無疑會(huì)生成許多小文件减途,因此后面還會(huì)有一個(gè)merge on disk酣藻,會(huì)將一個(gè)mapper上面生成的小文件根據(jù)partitions合并成一個(gè)大文件。這在圖二由詳細(xì)的描述鳍置。
- 7辽剧、然后繼續(xù)看圖二,還會(huì)有一個(gè)fetch(取來)的過程税产,這時(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诀紊,通過對(duì)key排序,將數(shù)據(jù)整合給Reduce處理隅俘,Reduce處理的過程和Mapper階段類似渡紫,面對(duì)大量數(shù)據(jù)當(dāng)然也會(huì)有:MemoryBuffer,Spill & Sort過程考赛。
- 9惕澎、Reduce: 多個(gè)reduce任務(wù)輸出的數(shù)據(jù)都屬于不同的 partition,因此結(jié)果數(shù)據(jù)的key不會(huì)重復(fù)颜骤。合并reduce的輸出文件即可得到最終的結(jié)果唧喉。
注意:
- 在顧及每個(gè)Mapper和Reducer處理的過程的細(xì)節(jié)的時(shí)候,還要跳出來,以全局的視角(即系統(tǒng)中會(huì)有多個(gè)Mapper和Reducer)觀察思考八孝,為什么設(shè)計(jì)的這么復(fù)雜董朝。
相關(guān)圖示
image.png
image.png
image.png
image.png