您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)如何進(jìn)行MapReduce中的JobSplit源碼分析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
根據(jù)MapRudece的原理,我們從4個(gè)過(guò)程去分析MR的源碼:
Split階段;
MapTask階段;
Shuffle階段;
ReduceTask階段;
下面首先介紹Split階段的源碼。
MR是通過(guò)JobSubmitter.submitJobInternal提交給RM的
在submitJobInternal中通過(guò)writeSplits(JobContext job, Path jobSubmitDir)
將job的輸入文件進(jìn)行split
writeSplit只是對(duì)新舊api進(jìn)行了下封裝,根據(jù)你的代碼選擇新舊api,這里調(diào)用writeNewSplits
使用新API對(duì)file進(jìn)行split
整個(gè)切片的邏輯過(guò)程主要就是在writeNewSplit里
進(jìn)入writeNewSplits()方法,可以看出該方法首先獲取splits數(shù)組信息后,排序,將會(huì)優(yōu)先處理大文件,最終返回mapper數(shù)量。這其中又分為兩部分:確定切片數(shù)量 和 寫(xiě)入切片信息。 確定切片數(shù)量的任務(wù)交由FileInputFormat的getSplits(job)完成,寫(xiě)入切片信息的任務(wù)交由JobSplitWriter.createSplitFiles(jobSubmitDir, conf, jobSubmitDir.getFileSystem(conf), array)方法,該方法會(huì)將切片信息和SplitMetaInfo都寫(xiě)入HDFS中。return array.length,
返回的是map任務(wù)數(shù),默認(rèn)map的數(shù)量是: default_num = total_size / block_size;
其內(nèi)部邏輯主要分為以下幾個(gè)步驟:
創(chuàng)建InputFormat實(shí)例,用實(shí)例調(diào)用getSplits方法對(duì)文件進(jìn)行切分,getSplits內(nèi)部是切分的主要邏輯;
將切片文件根據(jù)split的大小進(jìn)行sort逆序排序;
createSplitFiles:將保存切片信息的array數(shù)組落地到文件;
getSplits主要是將files進(jìn)行切片,將文件路徑path、偏移量(即起始位置,是該split在整個(gè)文件中的起始位置)、切分大小splitSize、偏移量所在block的locations信息Host和在內(nèi)存中的host信息寫(xiě)入FileSplit
對(duì)象中,一個(gè)split對(duì)應(yīng)一個(gè)對(duì)象,最后放入splits中返回。
createSplitFiles創(chuàng)建的文件包括兩個(gè),分別是記錄切片的切片文件和記錄切片元數(shù)據(jù)的切片元數(shù)據(jù)文件 。
補(bǔ)充內(nèi)容:
getSplits方法中split切片的大小
首先要區(qū)分兩個(gè)概念:塊(block)和切片(split)。塊是HDFS中的概念,文件在HDFS中是以塊為單位進(jìn)行存儲(chǔ)。切片是MapReduce中的概念;
split的大小由公式可知,取決于minSize、blockSize、maxSize三者之間的大小關(guān)系;從而也決定了split和block塊的大小關(guān)系,我們?cè)趯?shí)際使用中要保證split和block是一對(duì)一的關(guān)系;
關(guān)于如何進(jìn)行MapReduce中的JobSplit源碼分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。