[TOC]
創(chuàng)新互聯(lián)服務項目包括略陽網(wǎng)站建設、略陽網(wǎng)站制作、略陽網(wǎng)頁制作以及略陽網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,略陽網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到略陽省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
map端:
1)假設有兩個map task并行運行。
2)每個map task任務處理完成后,會通過收集器 collector,將輸出結果存入一個環(huán)形緩沖區(qū)中。
3)環(huán)形緩沖區(qū)工作原理:
1>環(huán)形緩沖區(qū)默認大小為100M,可以配置
mapred-site.xml:mapreduce.task.io.sort.mb 來配置大小
2>環(huán)形緩沖區(qū)閾值為 80%,超過就會開始spill溢寫??梢耘渲?mapred-site.xml:mapreduce.map.sort.spill.percent 來配置閾值的百分比
3>環(huán)形緩沖區(qū)存儲兩種數(shù)據(jù),
一種是元數(shù)據(jù):KV的分區(qū)號,key的起始位置,value的起始位置,value長度。每個元數(shù)據(jù)長度固定為4個int長度
一種是原始數(shù)據(jù):存儲key和value原本的數(shù)據(jù)
4>在元數(shù)據(jù)和原始數(shù)據(jù)的起始點,會有一個分界線,用于區(qū)分兩種數(shù)據(jù)的存儲區(qū)域,然后兩者往相反方向開始寫入數(shù)據(jù)。
5>當環(huán)形緩沖區(qū)超過80%時,會將這80%的數(shù)據(jù)鎖定,然后溢寫到磁盤中變成小文件,并且這個過程中,這80%的空間不能寫入數(shù)據(jù)(由后臺一個新的線程來執(zhí)行溢寫)。同時剩下的20%可以繼續(xù)寫入數(shù)據(jù)。直到溢寫結束,解除80%的空間鎖定。
4)spill:當緩沖器空間超過80%時,一個后臺線程會啟動,開始溢寫成小文件,寫入磁盤。在這個過程中,會對緩沖區(qū)中的元數(shù)據(jù)根據(jù)先根據(jù)分區(qū)號(每個分區(qū)一個溢寫文件),然后同一分區(qū)內根據(jù)key進行排序(這里的排序算法使用快速排序)。接著根據(jù)排好序的元數(shù)據(jù),溢寫相應的原始數(shù)據(jù)。最后得到已經(jīng)分區(qū)且分區(qū)內已根據(jù)key排好序的溢寫文件。
同時在溢寫最后一步,可以加入combine過程(可選的)。
這里說到是將元數(shù)據(jù)進行排序,然后根據(jù)排好序的元數(shù)據(jù)溢寫相應的原始數(shù)據(jù)。為什么要這樣呢?
因為排序過程中涉及到數(shù)據(jù)的移動,而原始數(shù)據(jù)比起元數(shù)據(jù)一般都要大,所以涉及到移動成本(包括內存空間,cpu等成本)比較大。所以這里直接根據(jù)原始數(shù)據(jù)中的key來排序元數(shù)據(jù),最后形成一個有序的元數(shù)據(jù)區(qū)域。最后只要依次根據(jù)元數(shù)據(jù),從原始數(shù)據(jù)區(qū)域中讀取對應位置的KV,就可以得到有序的原始數(shù)據(jù)。
5)歸并排序:當溢寫完成后,一般會發(fā)生多次溢寫,從而生成多個已分區(qū),并且區(qū)內有序的溢寫文件。接著就是將同一分區(qū)的多個溢寫文件進行歸并排序,合成一個大的溢寫文件,且里面是有序的。這個過程中也可以加入combine過程(可選的)。其實這個歸并的過程是分多次進行的,不是一次性完成的。
6)最后將歸并完后的溢寫文件經(jīng)過壓縮寫入到磁盤中。至此shuffle在map端的流程已經(jīng)完成
reduce端:一個分區(qū)對應一個reduce task
7)reducer中有的MRAppMaster線程定期詢問map task輸出結果的文件位置,mapper會在map結束后向MRAppMaster匯報信息,從而reducer得到map的狀態(tài),得到map的結果文件的目錄。接著reduce會自動向多個map拉取同一分區(qū)的結果文件到本地。拉取過程中,會先將數(shù)據(jù)暫存到緩沖區(qū)中,默認是100M,也是環(huán)形緩沖區(qū)。當數(shù)據(jù)量大于緩沖區(qū)大小時,就會將數(shù)據(jù)寫入到磁盤中。
8)歸并排序merge:拉取完成后,會將多個結果文件進行歸并排序,最終合成一個大的有序文件。這個merge 的過程中,會涉及到數(shù)據(jù)的輸入和輸出是在哪的,比如是輸入輸出都是內存中的,輸入內存,輸出硬盤的;輸入硬盤,輸出也是硬盤的。方式不同,明顯性能肯定不同。這是MapReduce優(yōu)化的一個點
9)接著會進行分組group過程。將同一個key的鍵值對合并成(key, array)的形式。如:(king,1), (king,2) 合并成 (king,[1,2])。這里面可以自定義分組方式。
10)而后面接著的group操作,一個分組就只會調用一次reduce方法,而且默認只會使用分組中的第一個KV作為reduce的輸入,剩余的KV不會做處理,直接丟棄。這里可以自定義分組類。
11)merge,group過程完畢后,就會每個KV調用一次reduce方法,最終reduce輸出。
partition:分區(qū)
spill:溢寫
merge:遷移合并
sort:排序。有3次排序。分別是溢寫中的快速排序,將多個溢寫文件合并的歸并排序。以及在reduce端中將多個map的結果文件進行歸并排序。
combine:map端的初次合并,業(yè)務邏輯就是reduce,只不過是局部的,這個過程是可選的。但是可以作為優(yōu)化的點,因為可以減少reduce從map拉取數(shù)據(jù)的數(shù)據(jù)量。
在map端溢出的文件其實有兩部分,一部分是索引文件,一部分是數(shù)據(jù)本身。
![](E:\file\big data\picture\assets\MapReduce-mapMerge.png)
索引文件:主要是記錄各個分區(qū)在數(shù)據(jù)文件中的偏移量。
數(shù)據(jù)文件:記錄了KV的長度,KV的數(shù)據(jù)。
其實由此可以看出,map端存儲多個分區(qū)的溢寫結果時,并不是獨立存儲到獨立的文件中的,而是存儲到同一個文件中,然后通過索引文件來標識各個分區(qū)的數(shù)據(jù)在總的數(shù)據(jù)文件中的偏移量來讀取不同分區(qū)的數(shù)據(jù)。這個存儲方式的好處是,如果分區(qū)很多話,單獨存儲每個分區(qū)的數(shù)據(jù),就會生成多個文件,占用多個hdfs的索引資源。而采用上述的方式,則只需讀取兩個文件。
網(wǎng)頁題目:三、MapReduce的shuffle工作過程
文章位置:http://www.rwnh.cn/article0/gcghoo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供自適應網(wǎng)站、企業(yè)建站、定制開發(fā)、網(wǎng)站內鏈、搜索引擎優(yōu)化、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)