好程序員大數(shù)據(jù)學(xué)習(xí)路線分享MapReduce全過(guò)程解析-創(chuàng)新互聯(lián)

好程序員大數(shù)據(jù)學(xué)習(xí)路線分享MapReduce全過(guò)程解析,移動(dòng)數(shù)據(jù)與移動(dòng)計(jì)算

成都創(chuàng)新互聯(lián)公司專注于成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點(diǎn)出發(fā),讓客戶在網(wǎng)絡(luò)營(yíng)銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)待客戶,用專業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

在學(xué)習(xí)大數(shù)據(jù)的時(shí)候接觸了移動(dòng)數(shù)據(jù)和移動(dòng)計(jì)算這兩種聯(lián)系緊密而又有很大不同的概念,其中移動(dòng)計(jì)算也叫做本地計(jì)算。

在以前的數(shù)據(jù)處理中時(shí)使用的移動(dòng)數(shù)據(jù),其實(shí)就是將需要處理的數(shù)據(jù)傳輸?shù)酱娣挪煌幚頂?shù)據(jù)方式邏輯的各個(gè)節(jié)點(diǎn)上。這樣做的效率很低,特別是大數(shù)據(jù)中的數(shù)據(jù)量是很大的,至少都是GB以上,更大的是TB、PB甚至更大,而且磁盤(pán)I/O、網(wǎng)絡(luò)I/O的效率是很低的,這樣處理起來(lái)就需要很長(zhǎng)的時(shí)間,遠(yuǎn)遠(yuǎn)不能滿足我們的要求。而移動(dòng)計(jì)算就出現(xiàn)了。

移動(dòng)計(jì)算,也叫做本地計(jì)算,是數(shù)據(jù)就存放在節(jié)點(diǎn)上不再變動(dòng),而是將處理邏輯程序傳輸?shù)礁鱾€(gè)數(shù)據(jù)節(jié)點(diǎn)上。由于處理程序的大小肯定不會(huì)特別的大,這樣就可以實(shí)現(xiàn)很快將程序傳輸?shù)酱娣艛?shù)據(jù)的各個(gè)節(jié)點(diǎn)上去,然后本地執(zhí)行處理數(shù)據(jù),效率高?,F(xiàn)在的大數(shù)據(jù)處理技術(shù)都是采用這種方式。

言簡(jiǎn)意賅的說(shuō):

Map階段:

1、Read:讀取數(shù)據(jù)源,將數(shù)據(jù)進(jìn)行filter成一個(gè)個(gè)的K/V

2、Map:在map函數(shù)中,處理解析的K/V,并產(chǎn)生新的K/V

3、Collect:輸出結(jié)果,存于環(huán)形內(nèi)緩沖區(qū)

4、Spill:內(nèi)存區(qū)滿,數(shù)據(jù)寫(xiě)到本地磁盤(pán),并生產(chǎn)臨時(shí)文件

5、Combine:合并臨時(shí)文件,確保生產(chǎn)一個(gè)數(shù)據(jù)文件

Reduce階段:

1、Shuffle:Copy階段,Reduce Task到各個(gè)Map Task遠(yuǎn)程復(fù)制一分?jǐn)?shù)據(jù),針對(duì)某一份數(shù)據(jù),2、若其大小超過(guò)一定閥值,則寫(xiě)磁盤(pán);否則放到內(nèi)存

3、Merge:合并內(nèi)存和磁盤(pán)上的文件,防止內(nèi)存占用過(guò)多或磁盤(pán)文件過(guò)多

4、Sort:Map Task階段進(jìn)行局部排序,Reduce Task階段進(jìn)行一次歸并排序

5、Reduce:將數(shù)據(jù)給reduce函數(shù)

6、Write:reduce函數(shù)將其計(jì)算的結(jié)果寫(xiě)到HDFS上

深度解析的說(shuō):

MapTask階段

(1)Read階段:MapTask通過(guò)用戶編寫(xiě)的RecordReader,從輸入InputSplit中解析出一個(gè)個(gè)key/value。?

(2)Map階段:該節(jié)點(diǎn)主要是將解析出的key/value交給用戶編寫(xiě)map()函數(shù)處理,并產(chǎn)生一系列新的key/value。

(3)Collect收集階段:在用戶編寫(xiě)map()函數(shù)中,當(dāng)數(shù)據(jù)處理完成后,一般會(huì)調(diào)用 OutputCollector.collect()輸出結(jié)果。在該函數(shù)內(nèi)部,它會(huì)將生成的key/value分區(qū)(調(diào)用 Partitioner),并寫(xiě)入一個(gè)環(huán)形內(nèi)存緩沖區(qū)中。?

(4)Spill階段:即“溢寫(xiě)”,當(dāng)環(huán)形緩沖區(qū)滿后,MapReduce 會(huì)將數(shù)據(jù)寫(xiě)到本地磁盤(pán)上,生成一個(gè)臨時(shí)文件。需要注意的是,將數(shù)據(jù)寫(xiě)入本地磁盤(pán)之前,先要對(duì)數(shù)據(jù)進(jìn)行一次本地排序,并在必要時(shí)對(duì)數(shù)據(jù)進(jìn)行合并、壓縮等操作。

溢寫(xiě)階段詳情:

步驟1:利用快速排序算法對(duì)緩存區(qū)內(nèi)的數(shù)據(jù)進(jìn)行排序,排序方式是,先按照分區(qū)編號(hào)partition進(jìn)行排序,然后按照key進(jìn)行排序。這樣,經(jīng)過(guò)排序后,數(shù)據(jù)以分區(qū)為單位聚集在一起,且同一分區(qū)內(nèi)所有數(shù)據(jù)按照key有序。?

步驟2:按照分區(qū)編號(hào)由小到大依次將每個(gè)分區(qū)中的數(shù)據(jù)寫(xiě)入任務(wù)工作目錄下的臨時(shí)文件output/spillN.out(N表示當(dāng)前溢寫(xiě)次數(shù))中。如果用戶設(shè)置了Combiner,則寫(xiě)入文件之前,對(duì)每個(gè)分區(qū)中的數(shù)據(jù)進(jìn)行一次聚集操作。?

步驟3:將分區(qū)數(shù)據(jù)的元信息寫(xiě)到內(nèi)存索引數(shù)據(jù)結(jié)構(gòu)SpillRecord中,其中每個(gè)分區(qū)的元信息包括在臨時(shí)文件中的偏移量、壓縮前數(shù)據(jù)大小和壓縮后數(shù)據(jù)大小。如果當(dāng)前內(nèi)存索引大小超過(guò)1MB,則將內(nèi)存索引寫(xiě)到文件output/spillN.out.index中。?

(5)Combine階段:當(dāng)所有數(shù)據(jù)處理完成后,MapTask對(duì)所有臨時(shí)文件進(jìn)行一次合并,以確保最終只會(huì)生成一個(gè)數(shù)據(jù)文件。當(dāng)所有數(shù)據(jù)處理完后,MapTask會(huì)將所有臨時(shí)文件合并成一個(gè)大文件,并保存到文件output/file.out中,同時(shí)生成相應(yīng)的索引文件output/file.out.index。在進(jìn)行文件合并過(guò)程中,MapTask以分區(qū)為單位進(jìn)行合并。對(duì)于某個(gè)分區(qū),它將采用多輪遞歸合并的方式。每輪合并io.sort.factor(默認(rèn)100)個(gè)文件,并將產(chǎn)生的文件重新加入待合并列表中,對(duì)文件排序后,重復(fù)以上過(guò)程,直到最終得到一個(gè)大文件。讓每個(gè)MapTask最終只生成一個(gè)數(shù)據(jù)文件,可避免同時(shí)打開(kāi)大量文件和同時(shí)讀取大量小文件產(chǎn)生的隨機(jī)讀取帶來(lái)的開(kāi)銷。信息包括在臨時(shí)文件中的偏移量、壓縮前數(shù)據(jù)大小和壓縮后數(shù)據(jù)大小。如果當(dāng)前內(nèi)存索引大小超過(guò)1MB,則將內(nèi)存索引寫(xiě)到文件output/spillN.out.index中。

Shuffle階段(map端的輸出到reduce的輸入)

1)maptask收集我們的map()方法輸出的kv對(duì),放到內(nèi)存緩沖區(qū)中

2)從內(nèi)存緩沖區(qū)不斷溢出本地磁盤(pán)文件,可能會(huì)溢出多個(gè)文件?

3)多個(gè)溢出文件會(huì)被合并成大的溢出文件?

4)在溢出過(guò)程中,及合并的過(guò)程中,都要調(diào)用partitioner進(jìn)行分區(qū)和針對(duì)key進(jìn)行排序?

5)reducetask根據(jù)自己的分區(qū)號(hào),去各個(gè)maptask機(jī)器上取相應(yīng)的結(jié)果分區(qū)數(shù)據(jù)?

6)reducetask會(huì)取到同一個(gè)分區(qū)的來(lái)自不同maptask的結(jié)果文件,reducetask會(huì)將這些文件再進(jìn)行合并(歸并排序)?

7)合并成大文件后,shuffle的過(guò)程也就結(jié)束了,后面進(jìn)入reducetask的邏輯運(yùn)算過(guò)程(從文件中取出一個(gè)一個(gè)的鍵值對(duì)group,調(diào)用用戶自定義的reduce()方法)?

3)注意Shuffle中的緩沖區(qū)大小會(huì)影響到mapreduce程序的執(zhí)行效率,原則上說(shuō),緩沖區(qū)越大,磁盤(pán)io的次數(shù)越少,執(zhí)行速度就越快。緩沖區(qū)的大小可以通過(guò)參數(shù)調(diào)整,參數(shù):io.sort.mb默認(rèn)100M。

ReduceTask階段

(1)Copy階段:ReduceTask從各個(gè)MapTask上遠(yuǎn)程拷貝一片數(shù)據(jù),并針對(duì)某一片數(shù)據(jù),如果其大小超過(guò)一定閾值,則寫(xiě)到磁盤(pán)上,否則直接放到內(nèi)存中。?

(2)Merge階段:在遠(yuǎn)程拷貝數(shù)據(jù)的同時(shí),ReduceTask啟動(dòng)了兩個(gè)后臺(tái)線程對(duì)內(nèi)存和磁盤(pán)上的文件進(jìn)行合并,以防止內(nèi)存使用過(guò)多或磁盤(pán)上文件過(guò)多。?

(3)Sort階段:按照MapReduce語(yǔ)義,用戶編寫(xiě)reduce()函數(shù)輸入數(shù)據(jù)是按key進(jìn)行聚集的一組數(shù)據(jù)。為了將key相同的數(shù)據(jù)聚在一起,Hadoop采用了基于排序的策略。由于各個(gè)MapTask已經(jīng)實(shí)現(xiàn)對(duì)自己的處理結(jié)果進(jìn)行了局部排序,因此,ReduceTask只需對(duì)所有數(shù)據(jù)進(jìn)行一次歸并排序即可。?

(4)Reduce階段:reduce()函數(shù)將計(jì)算結(jié)果寫(xiě)到HDFS上。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享題目:好程序員大數(shù)據(jù)學(xué)習(xí)路線分享MapReduce全過(guò)程解析-創(chuàng)新互聯(lián)
文章地址:http://muchs.cn/article24/djhsje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化網(wǎng)站策劃、網(wǎng)站營(yíng)銷、網(wǎng)站設(shè)計(jì)、企業(yè)網(wǎng)站制作、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)