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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

4.MR过程分析

發(fā)布時間:2023/12/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4.MR过程分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 1. 三大過程
    - Map側(cè)Shuffle
    - Reduce側(cè)Shuffle
  • 2. 六大組件
    - InputFormat
    - OutputFormat
    - Serilizer
    - Comparator
    - Combiner
    - Partitioner
  • 3. Mapreduce調(diào)優(yōu)

1. 三大過程

上一節(jié)演示了最簡單的MR任務(wù)的編寫,可以看到其實(shí)很簡單,說簡單點(diǎn)就是套模板。但是要想用好hadoop這一利器,需要了解更多執(zhí)行細(xì)節(jié),在基本概念中已經(jīng)說過mapreduce包括三大過程,最常見的一幅總結(jié)圖如下:

這里包括

  • Map 讀入文件塊,分割成指定鍵值對
  • Shuffle map輸出的鍵值對分組排序后輸出到磁盤,提供給reduce作為輸入
  • Reduce 讀入shuffle后的鍵值對處理

廣義來講只有Map和Reduce,但是和用戶需要編程處理的map/reduce過程相比,map輸出到reduce輸入中間有大量處理過程,都屬于shuffle,也有人區(qū)分map側(cè)shuffle和reduce側(cè)shuffle,參考下圖,詳細(xì)描述這兩個shuffle過程。

Map側(cè)Shuffle

  • map輸出不會直接輸出到磁盤,會先寫到一個環(huán)形緩沖區(qū),緩沖區(qū)大小參數(shù)io.sort.mb設(shè)置,當(dāng)超過一定閾值時(io.sort.spill.percent),一個后臺線程會把緩沖區(qū)內(nèi)容溢寫到指定目錄(mapred.local.dir)下的一個新建文件
  • 寫磁盤時會先按照指定的分組器分組Partitioner,默認(rèn)是HashPartitioner。示例按照鍵值的奇偶分成兩組,分組數(shù)和reduce數(shù)量相同
  • 然后按照指定指定的比較器Comparator排序鍵值對,示例按照鍵的大小排序。
  • 如果指定了組合器Combiner,會先將輸出的數(shù)據(jù)通過Combiner先做處理,這樣會減少傳輸數(shù)據(jù)量,加快處理速度。
  • 最終磁盤上存在一個個小的磁盤溢寫文件,這些文件歸并排序成一個大的分組排序好的文件

Reduce側(cè)Shuffle

  • 在reduce側(cè)通過http拉取map側(cè)對應(yīng)的分組數(shù)據(jù),數(shù)據(jù)序列器Serilizer序列化后傳輸以減少傳輸壓力
  • 拉取的數(shù)據(jù)先到緩沖區(qū)中排序合并
  • 如果數(shù)據(jù)量太大,采用和之前一樣的策略,先寫到磁盤上一個小文件,然后再做歸并排序,這里數(shù)據(jù)排序主要就是為了歸并排序

到此,mapreduce的過程應(yīng)該解析非常清楚了,可以發(fā)現(xiàn),在shuffle過程中存在大量的磁盤讀寫操作,因此相對較慢,Spark等計算模型針對此盡量把中間shuffle過程放在內(nèi)存中處理以加快速度,但是也應(yīng)該看到,由于采用基于磁盤的歸并方法,mapreduce可以廉價的成本支持超大規(guī)模的數(shù)據(jù)處理,這也是mapreduce的價值所在。

這三大過程可以用網(wǎng)友的一幅圖完全概括,如下:

2. 六大組件

mapreduce允許我們編寫map/reduce過程處理代碼外,還允許我們定制如上的三大過程細(xì)節(jié),姑且稱這些細(xì)節(jié)控制為組件編程。除了上述過程分析提到的外,mapreduce還包括InputFormat和OutputFormat,一共是如下六大組件:

InputFormat

針對不同數(shù)據(jù)源選擇不同InputFormat實(shí)現(xiàn)讀取輸入到map,決定了輸入數(shù)據(jù)如何解析,默認(rèn)TextInputFormat,按行解析文本輸入,鍵為偏移量,值為行數(shù)據(jù)。

OutputFormat

輸出數(shù)據(jù)處理,決定數(shù)據(jù)如何輸出,可以選擇不同的OutputFormat實(shí)現(xiàn)來輸出。

Serilizer

決定傳輸數(shù)據(jù)如何序列化和反序列化,需要實(shí)現(xiàn)Writable接口的write和readFields。

Comparator

定制鍵值對如何排序,需要實(shí)現(xiàn)Comparable接口的compareTo。

Combiner

定制鍵值對如何在到達(dá)Reduce前先本地reduce一遍,減少數(shù)據(jù)傳輸量,需要實(shí)現(xiàn)Reducer接口的reduce,一般函數(shù)內(nèi)容和Reduce過程一樣。

Partitioner

定制如何分組鍵值對,默認(rèn)是HashPartitioner,需要實(shí)現(xiàn)Partitioner接口的getPartition,一般不需要定制。

后面會分別講這些組件的編程實(shí)現(xiàn)。

3. Mapreduce調(diào)優(yōu)

關(guān)于這個問題,不會具體展開,《hadoop權(quán)威指南(第四版)》已經(jīng)總結(jié)的很好,便于理解的話可從如下幾點(diǎn)考慮

  • 充足的資源,包括map/reduce數(shù)量,對應(yīng)的cpu/mem/java opts配置
  • 足夠快的傳輸,壓縮/序列化/中間combiner排序/map join等
  • 沒有短板,shuffle過程調(diào)優(yōu),解決數(shù)據(jù)傾斜

如下對應(yīng)書中一個表供參考:

原創(chuàng),轉(zhuǎn)載請注明來自

  • 博客https://blog.csdn.net/wenzhou1219
  • 個人網(wǎng)站http://jimwen.net/

總結(jié)

以上是生活随笔為你收集整理的4.MR过程分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。