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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

MapReduce运行机制-Reduce阶段

發(fā)布時間:2024/4/13 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MapReduce运行机制-Reduce阶段 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ReduceTask 工作機制和 ReduceTask 并行度

?Reduce 大致分為 copy、sort、reduce 三個階段,重點在前兩個階段。copy 階段包含一個 eventFetcher 來獲取已完成的 map 列表,由 Fetcher 線程去 copy 數(shù)據(jù),在此過程中會啟動兩個 merge 線程,分別為 inMemoryMerger 和 onDiskMerger,分別將內(nèi)存中的數(shù)據(jù) merge 到磁盤和將磁盤中的數(shù)據(jù)進行 merge。待數(shù)據(jù) copy 完成之后,copy 階段就完成了,開始進行 sort 階段,sort 階段主要是執(zhí)行 finalMerge 操作,純粹的 sort 階段,完成之后就是 reduce 階段,調(diào)用用戶定義的 reduce 函數(shù)進行處理

詳細步驟

1. Copy階段,簡單地拉取數(shù)據(jù)。Reduce進程啟動一些數(shù)據(jù)copy線程(Fetcher),通過HTTP方式請求maptask獲取屬于自己的文件。

2. Merge階段。這里的merge如map端的merge動作,只是數(shù)組中存放的是不同map端copy來的數(shù)值。Copy過來的數(shù)據(jù)會先放入內(nèi)存緩沖區(qū)中,這里的緩沖區(qū)大小要比map端的更為靈活。merge有三種形式:內(nèi)存到內(nèi)存;內(nèi)存到磁盤;磁盤到磁盤。默認情
況下第一種形式不啟用。當內(nèi)存中的數(shù)據(jù)量到達一定閾值,就啟動內(nèi)存到磁盤的merge。與map 端類似,這也是溢寫的過程,這個過程中如果你設置有Combiner,也是會啟用的,然后在磁盤中生成了眾多的溢寫文件。第二種merge方式一直在運行,直到?jīng)]有map端的數(shù)據(jù)時才結(jié)束,然后啟動第三種磁盤到磁盤的merge方式生成最終的文件。

3. 合并排序。把分散的數(shù)據(jù)合并成一個大的數(shù)據(jù)后,還會再對合并后的數(shù)據(jù)排序。

4. 對排序后的鍵值對調(diào)用reduce方法,鍵相等的鍵值對調(diào)用一次reduce方法,每次調(diào)用會產(chǎn)生零個或者多個鍵值對,最后把這些輸出的鍵值對寫入到HDFS文件中。

Shuffle 過程

map 階段處理的數(shù)據(jù)如何傳遞給 reduce 階段,是 MapReduce 框架中最關(guān)鍵的一個流程,這個流程就叫 shuffle

shuffle: 洗牌、發(fā)牌 ——(核心機制:數(shù)據(jù)分區(qū),排序,分組,規(guī)約,合并等過程)

shuffle 是 Mapreduce 的核心,它分布在 Mapreduce 的 map 階段和 reduce 階段。一般把從 Map 產(chǎn)生輸出開始到 Reduce 取得數(shù)據(jù)作為輸入之前的過程稱作 shuffle。

1. Collect階段:將 MapTask 的結(jié)果輸出到默認大小為 100M 的環(huán)形緩沖區(qū),保存的是key/value,Partition 分區(qū)信息等。

2. Spill階段:當內(nèi)存中的數(shù)據(jù)量達到一定的閥值的時候,就會將數(shù)據(jù)寫入本地磁盤,在將數(shù)據(jù)寫入磁盤之前需要對數(shù)據(jù)進行一次排序的操作,如果配置了 combiner,還會將有相同分區(qū)號和 key 的數(shù)據(jù)進行排序。

3. Merge階段:把所有溢出的臨時文件進行一次合并操作,以確保一個 MapTask 最終只產(chǎn)生一個中間數(shù)據(jù)文件。

4. Copy階段:ReduceTask 啟動 Fetcher 線程到已經(jīng)完成 MapTask 的節(jié)點上復制一份屬于自己的數(shù)據(jù),這些數(shù)據(jù)默認會保存在內(nèi)存的緩沖區(qū)中,當內(nèi)存的緩沖區(qū)達到一定的閥值的時候,就會將數(shù)據(jù)寫到磁盤之上。

5. Merge階段:在 ReduceTask 遠程復制數(shù)據(jù)的同時,會在后臺開啟兩個線程對內(nèi)存到本地的數(shù)據(jù)文件進行合并操作。

6. Sort階段:在對數(shù)據(jù)進行合并的同時,會進行排序操作,由于 MapTask 階段已經(jīng)對數(shù)據(jù)進行了局部的排序,ReduceTask 只需保證 Copy 的數(shù)據(jù)的最終整體有效性即可。Shuffle 中的緩沖區(qū)大小會影響到 mapreduce 程序的執(zhí)行效率,原則上說,緩沖區(qū)越
大,磁盤io的次數(shù)越少,執(zhí)行速度就越快

緩沖區(qū)的大小可以通過參數(shù)調(diào)整, 參數(shù):mapreduce.task.io.sort.mb 默認100M

總結(jié)

以上是生活随笔為你收集整理的MapReduce运行机制-Reduce阶段的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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