MapReduce快速入門系列(5) | MapReduce任務流程和shuffle機制的簡單解析

      網友投稿 937 2022-05-28

      Hello,大家好,在本系列的第一篇博文中,博主已經為大家介紹了MapReduce的相關概念。其中談到了MapReduce主要由Map和Reduce兩個過程組成!事實上,為了讓Reduce可以并行處理Map的結果,需要對Map的輸出進行一定的分區(Partition),排序(Sort),合并(Combine),分組(Group)等操作,得到形式的中間結果,再交給對應的Reduce 進行處理,這個過程也就是小菌需要為大家介紹的,叫做Shuffle(混洗)。

      目錄

      1. Shuffle機制

      2. Shuffle階段的四個操作

      3. MapReduce工作流程

      3.1 MapReduce的整個任務執行過程

      3.2 MapReduce工作流程圖(全)

      3.3 注意

      1. Shuffle機制

      MapReduce快速入門系列(5) | MapReduce任務流程和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小時內刪除侵權內容。

      上一篇:樹莓派 配置中文環境
      下一篇:nodejs初始與安裝配置
      相關文章
      亚洲熟妇无码一区二区三区导航| 亚洲成AV人在线观看天堂无码| 亚洲午夜久久久影院| 在线观看亚洲电影| 亚洲丰满熟女一区二区哦| 亚洲无码一区二区三区| 在线观看日本亚洲一区| 亚洲精品国产国语| 亚洲人成网站色7799| 亚洲精品无AMM毛片| 亚洲色欲色欲www在线播放| 中文字幕在线日亚洲9| 亚洲熟妇AV日韩熟妇在线| 亚洲中文字幕精品久久| 亚洲欧洲国产综合AV无码久久| 亚洲欧美熟妇综合久久久久| 亚洲高清乱码午夜电影网| 亚洲av无码专区在线观看下载| 亚洲乱码中文字幕在线| 亚洲AV日韩AV一区二区三曲| 日本亚洲欧美色视频在线播放 | 亚洲精品无码AV人在线播放| 国产亚洲精品看片在线观看| 亚洲愉拍99热成人精品热久久| 国产亚洲无线码一区二区| 亚洲AV福利天堂一区二区三| 久久精品国产亚洲AV高清热| 亚洲一区二区三区国产精品无码| 亚洲色在线无码国产精品不卡| 亚洲国产成人无码AV在线影院 | 午夜亚洲www湿好大| 精品亚洲aⅴ在线观看| 亚洲国产精品网站久久| 亚洲午夜无码久久| mm1313亚洲国产精品无码试看| 亚洲国产成人久久综合碰| 亚洲永久无码3D动漫一区| 亚洲人成在线电影| 亚洲色欲色欲www| 久久亚洲AV成人无码国产电影| 亚洲精品国产综合久久一线|