更新時間:2021-01-26 來源:黑馬程序員 瀏覽量:
Reduce大致分為copy、sort、reduce三個階段,重點(diǎn)在前兩個階段。
copy階段包含一個eventFetcher來獲取已完成的map列表,由Fetcher線程去copy數(shù)據(jù),在此過程中會啟動兩個merge線程,分別為 inMemoryMerger和onDiskMerger,分別將內(nèi)存中的數(shù)據(jù)merge到磁盤和將磁盤中的數(shù)據(jù)進(jìn)行merge。待數(shù)據(jù)copy完成之后,copy階段就完成了,開始進(jìn)行sort階段。
sort階段主要是執(zhí)行finalMerge操作,純粹的 sort階段,完成之后就是reduce階段,調(diào)用用戶定義的reduce函數(shù)進(jìn)行處理。
具體步驟如下:
Copy階段,簡單地拉取數(shù)據(jù)。Reduce進(jìn)程啟動一些數(shù)據(jù)copy線程(Fetcher),通過HTTP方式請求maptask 獲取屬于自己的文件。Merge階段。這里的merge如map端的merge動作,只是數(shù)組中存放的是不同map端copy來的數(shù)值。Copy過來的數(shù)據(jù)會先放入內(nèi)存緩沖區(qū)中,這里的緩沖區(qū)大小要比map端的更為靈活。merge有三種形式:內(nèi)存到內(nèi)存;內(nèi)存到磁盤;磁盤到磁盤。默認(rèn)情況下第一種形式不啟用。當(dāng)內(nèi)存中的數(shù)據(jù)量到達(dá)一定閾值,就啟動內(nèi)存到磁盤的merge。與map 端類似,這也是溢寫的過程,這個過程中如果你設(shè)置有Combiner,也是會啟用的,然后在磁盤中生成了眾多的溢寫文件。第二種merge方式一直在運(yùn)行,直到?jīng)]有map端的數(shù)據(jù)時才結(jié)束,然后啟動第三種磁盤到磁盤的merge方式生成最終的文件。
把分散的數(shù)據(jù)合并成一個大的數(shù)據(jù)后,還會再對合并后的數(shù)據(jù)排序。
對排序后的鍵值對調(diào)用reduce方法,鍵相等的鍵值對調(diào)用一次reduce方法,每次調(diào)用會產(chǎn)生零個或者多個鍵值對, 后把這些輸出的鍵值對寫入到HDFS文件中。
猜你喜歡: