elasticsearch入門系列">elasticsearch入門系列
937
2022-05-28
Hello,大家好,在本系列的第一篇博文中,博主已經為大家介紹了MapReduce的相關概念。其中談到了MapReduce主要由Map和Reduce兩個過程組成!事實上,為了讓Reduce可以并行處理Map的結果,需要對Map的輸出進行一定的分區(Partition),排序(Sort),合并(Combine),分組(Group)等操作,得到
目錄
1. Shuffle機制
2. Shuffle階段的四個操作
3. MapReduce工作流程
3.1 MapReduce的整個任務執行過程
3.2 MapReduce工作流程圖(全)
3.3 注意
1. Shuffle機制
Shuffle機制如下:
是不是發現可能看不懂!沒關系下面開始細化詳解一下。
2. Shuffle階段的四個操作
下圖為Shuffle階段的四個操作的具體功能演示:
如果對上圖的一臉懵逼,不要慌!下面即為詳細解答:
第5步:對輸出的key,value對進行分區。相同key的數據發送到同一個reduce里面去,相同key合并,value形成一個集合
第6步:對不同分區的數據按照相同的key進行排序
第7步:對分組后的數據進行規約(combine操作),降低數據的網絡拷貝(可選步驟)
第8步:對排序后的額數據進行分組,分組的過程中,將相同key的value放到一個集合當中
3. MapReduce工作流程
3.1 MapReduce的整個任務執行過程
由于空間有限,2,3步驟過程較為抽象,只做文字說明
具體每步的詳細流程如下:
第1步:InputFormat InputFormat 到hdfs上讀取數據 將數據傳給Split 第2步:Split Split將數據進行邏輯切分, 將數據傳給RR 第3步:RR(RecordReader) RR:將傳入的數據轉換成一行一行的數據,輸出行首字母偏移量和偏移量對應的數據 將數據傳給MAP 第4步:MAP MAP:根據業務需求實現自定義代碼 將數據傳給Shuffle的partition 第5步:partition partition:按照一定的分區規則,將key value的list進行分區。 將數據傳給Shuffle的Sort 第6步:Sort Sort:對分區內的數據進行排序 將數據傳給Shuffle的combiner 第7步:combiner combiner:對數據進行局部聚合。 將數據傳給Shuffle的Group 第8步:Group Group:將相同key的key提取出來作為唯一的key, 將相同key對應的value獲取出來作為value的list 將數據傳給Reduce 第9步:Reduce Reduce:根據業務需求進行最終的合并匯總。 將數據傳給outputFormat 第10步:outputFormat outputFormat:將數據寫入HDFS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
3.2 MapReduce工作流程圖(全)
1. MapReduce詳細工作流程(一)
2. MapReduce詳細工作流程(二)
3. 詳細流程解析
上面的流程是整個MapReduce最全工作流程,但是
Shuffle過程
只是從第7步開始到第16步結束,具體Shuffle過程詳解,如下:
① MapTask收集我們的map()方法輸出的kv對,放到內存緩沖區中
② 從內存緩沖區不斷溢出本地磁盤文件,可能會溢出多個文件
③ 多個溢出文件會被合并成大的溢出文件
④ 在溢出過程及合并的過程中,都要調用Partitioner進行分區和針對key進行排序
⑤ ReduceTask根據自己的分區號,去各個MapTask機器上取相應的結果分區數據
⑥ ReduceTask會取到同一個分區的來自不同MapTask的結果文件,ReduceTask會將這些文件再進行合并(歸并排序)
⑦ 合并成大文件后,Shuffle的過程也就結束了,后面進入ReduceTask的邏輯運算過程(從文件中取出一個一個的鍵值對Group,調用用戶自定義的reduce()方法)
3.3 注意
Shuffle中的緩沖區大小會影響到MapReduce程序的執行效率,原則上說,緩沖區越大,磁盤io的次數越少,執行速度就越快。
緩沖區的大小可以通過參數調整,參數:io.sort.mb默認100M
本次關于MapReduce任務流程和shuffle機制的簡單解析就到這里了,關于流程中shuffle階段的Partition分區算法以及split的邏輯切分規律,博主會在后續的博客中為大家解答,感興趣的小伙伴們記得關注博主呀!
MapReduce
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。