日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop学习笔记—10.Shuffle过程那点事儿

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop学习笔记—10.Shuffle过程那点事儿 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hadoop學習筆記—10.Shuffle過程那點事兒

一、回顧Reduce階段三大步驟

  在第四篇博文《初識MapReduce》中,我們認識了MapReduce的八大步驟,其中在Reduce階段總共三個步驟,如下圖所示:

  其中,Step2.1就是一個Shuffle操作,它針對多個map任務的輸出按照不同的分區(Partition)通過網絡復制到不同的reduce任務節點上,這個過程就稱作為Shuffle。

PS:Hadoop的shuffle過程就是從map端輸出到reduce端輸入之間的過程,這一段應該是Hadoop中最核心的部分,因為涉及到Hadoop中最珍貴的網絡資源,所以shuffle過程中會有很多可以調節的參數,也有很多策略可以研究,這方面可以看看大神董西成的相關文章或他寫的MapReduce相關書籍。

二、Shuffle過程淺析

  上圖中分為Map任務和Reduce任務兩個階段,從map端輸出到reduce端的紅色和綠色的線表示數據流的一個過程,也我們所要了解的Shuffle過程。

2.1 Map端

  (1)在map端首先接觸的是InputSplit,在InputSplit中含有DataNode中的數據,每一個InputSplit都會分配一個Mapper任務,Mapper任務結束后產生<K2,V2>的輸出,這些輸出先存放在緩存中, 每個map有一個環形內存緩沖區,用于存儲任務的輸出。默認大小100MB(io.sort.mb屬性),一旦達到閥值0.8(io.sort.spil l.percent),一個后臺線程就把內容寫到(spill)Linux本地磁盤中的指定目錄(mapred.local.dir)下的新建的一個溢出 寫文件。

總結:map過程的輸出是寫入本地磁盤而不是HDFS,但是一開始數據并不是直接寫入磁盤而是緩沖在內存中,緩存的好處就是減少磁盤I/O的開銷,提高合并和排序的速度。又因為默認的內存緩沖大小是100M(當然這個是可以配置的),所以在編寫map函數的時候要盡量減少內存的使用,為shuffle過程預留更多的內存,因為該過程是最耗時的過程。

  (2)寫磁盤前,要進行partition、sort和combine等操作。通過分區,將不同類型的數據分開處理,之后對不同分區的數據進行 排序,如果有Combiner,還要對排序后的數據進行combine。等最后記錄寫完,將全部溢出文件合并為一個分區且排序的文件。

  (3)最后將磁盤中的數據送到Reduce中,從圖中可以看出Map輸出有三個分區,有一個分區數據被送到圖示的Reduce任務中,剩下的兩個分區被送到其他Reducer任務中。而圖示的Reducer任務的其他的三個輸入則來自其他節點的Map輸出。

補充:在寫磁盤的時候采用壓縮的方式將map的輸出結果進行壓縮是一個減少網絡開銷很有效的方法!關于如何使用壓縮,在本文第三部分會有介紹。

2.2 Reduce端

  (1)Copy階段:Reducer通過Http方式得到輸出文件的分區。

  reduce端可能從n個map的結果中獲取數據,而這些map的執行速度不盡相同,當其中一個map運行結束時,reduce就會從 JobTracker中獲取該信息。map運行結束后TaskTracker會得到消息,進而將消息匯報給JobTracker,reduce定時從 JobTracker獲取該信息,reduce端默認有5個數據復制線程從map端復制數據。

  (2)Merge階段:如果形成多個磁盤文件會進行合并

  從map端復制來的數據首先寫到reduce端的緩存中,同樣緩存占用到達一定閾值后會將數據寫到磁盤中,同樣會進行partition、 combine、排序等過程。如果形成了多個磁盤文件還會進行合并,最后一次合并的結果作為reduce的輸入而不是寫入到磁盤中。
  (3)Reducer的參數:最后將合并后的結果作為輸入傳入Reduce任務中。

總結:當Reducer的輸入文件確定后,整個Shuffle操作才最終結束。之后就是Reducer的執行了,最后Reducer會把結果存到HDFS上。

三、Hadoop中的壓縮

  剛剛我們在了解Shuffle過程中看到,map端在寫磁盤的時候采用壓縮的方式將map的輸出結果進行壓縮是一個減少網絡開銷很有效的方法。其實,在Hadoop中早已為我們提供了一些壓縮算法的實現,我們不用重復造輪子了。

3.1 解壓縮算法的實現:Codec

  Codec是Hadoop中關于壓縮,解壓縮的算法的實現,在Hadoop中,codec由CompressionCode的實現來表示。下面是一些常見壓縮算法實現,如下圖所示:

3.2 MapReduce的輸出進行壓縮

  (1)MapReduce的輸出屬性如下所示

  (2)在Java中如何針對輸出設置壓縮 ★★★

  上圖中在reduce端輸出壓縮使用了剛剛Codec中的Gzip算法,當然你也可以使用bzip2算法;

參考資料

(1)董西成,《Hadoop中shuffle階段流程分析》:http://dongxicheng.org/mapreduce/hadoop-shuffle-phase/?(該文對Shuffle階段的一些不足做出了分析,并給出了幾個目前流行的解決辦法)

(2)左堅,《Hadoop計算中的shuffle過程》:http://www.wnt.com.cn/html/news/tophome/top_xytd/top_xytd_jswz/bbs_service/20130711/111140562.html

(3)皮皮家的程序猿,《Hadoop中的shuffle過程》:http://www.cnblogs.com/zhangcm/archive/2012/11/23/2784495.html

(4)Suddenly,《MapReduce排序和分組》:http://www.cnblogs.com/sunddenly/p/4009751.html

?

作者:周旭龍

出處:http://edisonchou.cnblogs.com/

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。

轉載于:https://www.cnblogs.com/1130136248wlxk/p/4975110.html

總結

以上是生活随笔為你收集整理的Hadoop学习笔记—10.Shuffle过程那点事儿的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。