Mapper和Reduce階段流程

2021-10-07 09:04:59 字數 2001 閱讀 6894

1.預設的textinputformat

場景:  普通的文字格式資料**

切片:  採用預設的切片策略,以檔案為單位,先判斷檔案是否可切,如果可切,迴圈以片大小為單位切片!

不可切,整個檔案作為1片!

rr :  linerecordreader(將一行封裝為乙個key-value)

longwritable    key: 行的偏移量

text  value:  行的內容

2. nlineinputformat

場景: 適合一行的內容特別多,在map階段map()處理的邏輯非常複雜!

根據行數自定義切片的大小!

切片:    可以設定以檔案為單位,每n行作為乙個切片!

rr :  linerecordreader(將一行封裝為乙個key-value)

longwritable    key: 行的偏移量

text  value:  行的內容

3. keyvaluetextinputformat

場景:  一行的內容的格式 為 key-value,方便地將key,value拆分封裝

切片:  採用預設的切片策略,以檔案為單位,先判斷檔案是否可切,如果可切,迴圈以片大小為單位切片!

不可切,整個檔案作為1片!

rr :  keyvaluerecordreader(將一行封裝為乙個key-value)

text    key:  行的分隔符之前的部分內容

text  value:   行的分隔符之後的部分內容

4. combinetextinputformat

場景:  輸入目錄中小檔案過多,可以將多個小檔案設定到乙個切片中!

切片:  ①根據maxsize對每個檔案進行邏輯切片,切分為若干part

②將多個part組合,知道超過maxsize,這些part作為乙個切片

rr :  linerecordreader(將一行封裝為乙個key-value)

longwritable    key: 行的偏移量

text  value:  行的內容    

三、切片和塊

切片:  對檔案進行邏輯切分,只有在執行mr任務時,才會對檔案切分!

切分時,切片的大小不同,每個檔案切分的結果也不同!

塊:  檔案在上傳到hdfs時,在hdfs上儲存的最小單位,物理儲存!

關係: maptask在讀取切片的內容時,需要根據切片的metainfo,獲取到當前切片屬於檔案的哪部分!

再根據此資訊去尋找對應的塊,讀取資料!

預設切片大小等於塊大小,主要為了減少在執行mr時,大量的跨機器讀取切片內容帶來額外的網路io!

shuffle機制1)

map方法之後

reduce

方法之前這段處理過程叫

shuffle 2

)map

方法之後,資料首先進入到分割槽方法,把資料標記好分割槽,然後把資料傳送到環形緩衝區;環形緩衝區預設大小

100m

,環形緩衝區達到

80%時,進行溢寫;溢寫前對資料進行排序,排序按照對

key的索引進行字典順序排序,排序的手段快排;溢寫產生大量溢寫檔案,需要對溢寫檔案進行歸併排序;對溢寫的檔案也可以進行

combiner

操作,前提是彙總操作,求平均值不行。最後將檔案按照分割槽儲存到磁碟,等待

reduce

端拉取。 3

)每個reduce

拉取map

端對應分割槽的資料。拉取資料後先儲存到記憶體中,記憶體不夠了,再儲存到磁碟。拉取完所有資料後,採用歸併排序將記憶體和磁碟中的資料都進行排序。在進入

reduce

方法前,可以對資料進行分組操作。

Mapper 元素和屬性

parametertype 輸入型別 傳遞簡單型別 使用 佔位符,或者 進行sql拼接,括號中的值可以任意,括號中的值為value。傳遞pojo物件 mybatis使用ognl表示式解析物件欄位的值,或者 括號中的值為pojo屬性名稱 而且必須有對應的set方法 resulttype 輸出型別 輸出...

reduce方法和reduceRight方法

什麼是reduce方法?先來看一下用用法 var arr 1,2,3,4 var sum a,b a b arr.reduce sum,0 10由上面 可以看出,reduce對陣列arr的每乙個成員執行了sum函式。sum的引數a是累積變數,引數b是當前的陣列成員。每次執行時,b會回到a,最後輸出a...

Repository和 Mapper的區別

repository是spring的註解 description field userservice in com.example.demo.three.controller.usercontroller required a bean of type com.example.demo.three....