MapReducer工作流程圖:
創(chuàng)新互聯(lián)基于成都重慶香港及美國等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動(dòng)大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)
成都機(jī)柜租用報(bào)價(jià),主機(jī)托管價(jià)格性價(jià)比高,為金融證券行業(yè)服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。
1. MapReduce階段源碼分析
1)客戶端提交源碼分析
解釋:
- 判斷是否打印日志
- 判斷是否使用新的API,檢查連接
- 在檢查連接時(shí),檢查輸入輸出路徑,計(jì)算切片,將jar、配置文件復(fù)制到HDFS
- 計(jì)算切片時(shí),計(jì)算最小切片數(shù)(默認(rèn)為1,可自定義)和大切片數(shù)(默認(rèn)是long的大值,可以自定義)
- 查看給定的是否是文件,如果是否目錄計(jì)算目錄下所有文件的切片
- 通過block大小和最小切片數(shù)、大切片數(shù)計(jì)算出切片大小
- 過切片大小,計(jì)算出map的數(shù)量以及分發(fā)到的節(jié)點(diǎn)
- 提交job給yarn,進(jìn)行MapReduce計(jì)算
2)map階段源碼分析源碼分析(Map 的input階段)
解釋:
- 首先Map Task任務(wù),調(diào)用run()方法,run()方法會(huì)經(jīng)過以下幾個(gè)階段
- 初始化taskcontext對(duì)象
- 對(duì)mapper對(duì)象的初始化,此處包括一個(gè)默認(rèn)值的判斷,如果沒有自定義mapper類,默認(rèn)用系統(tǒng)的Mapper
- 對(duì)文件輸入的格式化,此處包括一個(gè)默認(rèn)值的判斷,如果沒有自定義inputFormat類,默認(rèn)用系統(tǒng)的TextinputFormat
- 創(chuàng)建input對(duì)象,創(chuàng)建具體的文件讀取類,通過lineReader(),默認(rèn)每次迭代讀取一行,此處實(shí)現(xiàn)一個(gè)迭代的判斷的nextKeyVaule(),并在nextKeyVaule實(shí)現(xiàn)時(shí)初始化key和value
- Input初始化:計(jì)算打開位置,讀取文件內(nèi)容,(放棄第一行)
- 調(diào)用mapper的run方法循環(huán)讀取,直到末尾,多讀一行,start放棄第一行的數(shù)據(jù)被上一個(gè)切片讀到,注意這里的run方法中就會(huì)調(diào)用我們編寫的Mapper類中的setup、map、cleanup方法
3)map階段源碼分析源碼分析(Map 的output階段)
解釋:
- 由newOutCollector創(chuàng)建output對(duì)象
- newOutCollector中需要準(zhǔn)備collector和partitions計(jì)算reduce數(shù)量,會(huì)將map端輸出的K,V,P(分區(qū)號(hào))寫入collector中
- 在準(zhǔn)備collector實(shí)際上是準(zhǔn)備MpaOutputBuffer,這是一特別復(fù)雜的過程,這里向大致的解釋一下,就是先將收集的KV,P寫入一個(gè)環(huán)形的緩沖區(qū),然后在經(jīng)過排序和分區(qū)將數(shù)據(jù)寫入到文件中。(具體過程會(huì)在下面的shuffle中講解)
- 最后mapOut結(jié)束之后,會(huì)調(diào)用close方法關(guān)閉output,在關(guān)閉時(shí),會(huì)將剩余在buffer環(huán)的數(shù)據(jù)緩沖出去,并且將所有一些的小文件進(jìn)行排序然后合并成一個(gè)大文件。
2. shuffle過程詳解
過程介紹:
- 假如在hdfs中存儲(chǔ)一個(gè)300M文件,每個(gè)block的大小默認(rèn)為128M,而且默認(rèn)的切片大小也是128M,因此,每一個(gè)MapTask任務(wù)會(huì)處理一個(gè)split,則是有三個(gè)MapTask并行處理。
- 每一個(gè)MapTask任務(wù)處理完成后,會(huì)通過收集器,將輸出的結(jié)果存入一個(gè)環(huán)形緩沖區(qū)中,寫入的過程會(huì)經(jīng)過簡單的排序,這個(gè)環(huán)形緩沖區(qū)的默認(rèn)是100M,當(dāng)環(huán)形緩沖區(qū)的大小使用超過80%,一個(gè)后臺(tái)線程就會(huì)啟動(dòng)把環(huán)形緩沖區(qū)中的數(shù)據(jù)寫入到磁盤文件,同時(shí)Map會(huì)繼續(xù)向環(huán)形緩沖區(qū)中寫入數(shù)據(jù)。
- 環(huán)形緩沖去的工作原理:
- 環(huán)形緩沖區(qū)的大小默認(rèn)為100M(可以配置mapred-site.xml:mapreduce.task.io.sort.mb)
- 環(huán)形緩沖區(qū)的閾值為:80%((mapred-site.xml:mapreduce.map.sort.spill.percent,默認(rèn)80%)
- 在環(huán)形緩沖區(qū)中,存儲(chǔ)了兩種數(shù)據(jù),一個(gè)是元數(shù)據(jù):分區(qū)號(hào),map的key的起始位置,map的value的起始位置,map的value的長度(每一個(gè)元數(shù)據(jù)長度為4個(gè)int長度,長度固定)
- 一種是原始數(shù)據(jù):存放map的key和value
- 在存儲(chǔ)原始數(shù)據(jù)和元數(shù)據(jù)的時(shí)候,會(huì)將元數(shù)據(jù)和原始數(shù)據(jù)中間建立一個(gè)赤道,分割二者,然后不斷的向兩端寫入數(shù)據(jù),在環(huán)形緩沖區(qū)的數(shù)據(jù)寫入到80%的時(shí)候,將這些數(shù)據(jù)鎖定,然后向硬盤中溢寫成小文件,同時(shí)環(huán)形緩沖區(qū)的剩下的部分仍然可以寫數(shù)據(jù),直到溢寫結(jié)束,鎖定釋放,繼續(xù)可以將元數(shù)據(jù)和原始數(shù)據(jù)寫入緩沖區(qū)中。
- 緩沖區(qū)溢寫小文件:在溢寫小文件的時(shí)候,會(huì)對(duì)緩沖區(qū)中的元數(shù)據(jù)根據(jù)分區(qū)號(hào)和key進(jìn)行排序,然后根據(jù)排序好的元數(shù)據(jù),溢寫相應(yīng)的原始數(shù)據(jù)(這是因?yàn)樵獢?shù)據(jù)的大小是固定的,比直接排序原始數(shù)據(jù)更容易),這樣最后就會(huì)溢寫出多個(gè)已經(jīng)根據(jù)分區(qū)和key排序好的小文件(這里可以加入conbiner)
- 對(duì)溢寫后的小文件進(jìn)行歸并:此時(shí)會(huì)將溢寫后的小文件進(jìn)行歸并成一個(gè)大文件(使用歸并排序),此時(shí)合并的大文件已經(jīng)按照分區(qū)和key排好序,
- reduce拉取相應(yīng)的數(shù)據(jù):Reducer 中的一個(gè)線程定期向MRAppMaster詢問Mapper輸出結(jié)果文件位置,mapper結(jié)束后會(huì)向MRAppMaster匯報(bào)信息,從而 Reducer 得知 Mapper 狀態(tài),得到 map 結(jié)果文件目錄;reduce會(huì)相應(yīng)的拉取相同分區(qū)的小文件到本地
- 然后會(huì)將拉取得到的相應(yīng)的相同分區(qū)的小文件,進(jìn)行歸并排序合并成為一個(gè)有序的大文件(相同的key在一起)。
- 然后根據(jù)分組規(guī)則,相同的key為一組調(diào)用一次reduce方法,處理數(shù)據(jù)
- 最終將結(jié)果數(shù)據(jù)根據(jù)分區(qū)寫入到不同的分區(qū)文件中。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
標(biāo)題名稱:MapReduce階段源碼分析以及shuffle過程詳解-創(chuàng)新互聯(lián)
分享地址:
http://weahome.cn/article/dpeohj.html