您好,登錄后才能下訂單哦!
MapReducer工作流程圖:
解釋:
- 判斷是否打印日志
- 判斷是否使用新的API,檢查連接
- 在檢查連接時,檢查輸入輸出路徑,計算切片,將jar、配置文件復(fù)制到HDFS
- 計算切片時,計算最小切片數(shù)(默認(rèn)為1,可自定義)和最大切片數(shù)(默認(rèn)是long的最大值,可以自定義)
- 查看給定的是否是文件,如果是否目錄計算目錄下所有文件的切片
- 通過block大小和最小切片數(shù)、最大切片數(shù)計算出切片大小
- 過切片大小,計算出map的數(shù)量以及分發(fā)到的節(jié)點(diǎn)
- 提交job給yarn,進(jìn)行MapReduce計算
解釋:
- 首先Map Task任務(wù),調(diào)用run()方法,run()方法會經(jīng)過以下幾個階段
- 初始化taskcontext對象
- 對mapper對象的初始化,此處包括一個默認(rèn)值的判斷,如果沒有自定義mapper類,默認(rèn)用系統(tǒng)的Mapper
- 對文件輸入的格式化,此處包括一個默認(rèn)值的判斷,如果沒有自定義inputFormat類,默認(rèn)用系統(tǒng)的TextinputFormat
- 創(chuàng)建input對象,創(chuàng)建具體的文件讀取類,通過lineReader(),默認(rèn)每次迭代讀取一行,此處實(shí)現(xiàn)一個迭代的判斷的nextKeyVaule(),并在nextKeyVaule實(shí)現(xiàn)時初始化key和value
- Input初始化:計算打開位置,讀取文件內(nèi)容,(放棄第一行)
- 調(diào)用mapper的run方法循環(huán)讀取,直到末尾,多讀一行,start放棄第一行的數(shù)據(jù)被上一個切片讀到,注意這里的run方法中就會調(diào)用我們編寫的Mapper類中的setup、map、cleanup方法
解釋:
- 由newOutCollector創(chuàng)建output對象
- newOutCollector中需要準(zhǔn)備collector和partitions計算reduce數(shù)量,會將map端輸出的K,V,P(分區(qū)號)寫入collector中
- 在準(zhǔn)備collector實(shí)際上是準(zhǔn)備MpaOutputBuffer,這是一特別復(fù)雜的過程,這里向大致的解釋一下,就是先將收集的KV,P寫入一個環(huán)形的緩沖區(qū),然后在經(jīng)過排序和分區(qū)將數(shù)據(jù)寫入到文件中。(具體過程會在下面的shuffle中講解)
- 最后mapOut結(jié)束之后,會調(diào)用close方法關(guān)閉output,在關(guān)閉時,會將剩余在buffer環(huán)的數(shù)據(jù)緩沖出去,并且將所有一些的小文件進(jìn)行排序然后合并成一個大文件。
過程介紹:
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。