《hadoop權威指南》讀書摘要

1、MapReduce執行流程

RecordReader->讀取文件數據,將數據拆分爲kv對
map階段->調用用戶定義程序處理kv對,並對數據進行分區(job.setPartitionerClass)後存儲到“環形內存緩衝區”,
         當緩衝區達到一定閾值時(默認80%),會啓動後臺線程將部分數據溢出寫入(spill)磁盤的臨時文件中,
         將數據寫入文件前會先進行排序(job.setSortComparatorClass)後執行合併(combine)操作(可選)。
         當整個map任務完成溢出寫入(spill)後,會將所有臨時文件執行歸併(merge)操作,生成一個大文件 
         此時的歸併會將spill文件中所有的相同partition合併到一起,並對每個partition中的數據按照key進行排序(sort)操作,生成key和對應的value-list,文件歸併時,如果溢寫文件數量超過參數min.num.spills.for.combine的值(默認爲3)時,可以再次進行合併(combine)。
         
reduce階段-> reduce task會從不同的job里拉取map task的最終結果,並將相同的partition數據歸併(merge)成一個大文件,對文件中的數據按key進行排序。
         之後會對數據進行分組(job.setGroupingComparatorClass)。之後調用reduce進行數據處理 
         ps:如果:reduce數=1,所有分區都在一個reduce中處理,生成一個文件
                  1<reduce數<分區數,會報錯,有的分區找不到處理的reduce
                  reduce數>分區數,會有本分reduce沒有數據處理,生成空文件 
                  
                  一個分組調用一次reduce()方法 

參考:https://blog.csdn.net/asn_forever/article/details/81233547

           https://blog.csdn.net/u014374284/article/details/49205885

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章