MapReduce計算框架的核心程式設計思想
阿新 • • 發佈:2020-07-12
@ 目錄
概念
Job
(作業) : 一個MapReduce
程式稱為一個Job。
MRAppMaster
(MR任務的主節點): 一個Job在執行時,會先啟動一個程式,這個程式稱為MRAppMaster,負責Job中執行狀態的監控,容錯,和RM申請資源,提交Task等。
Task
(任務): Task是一個程式,負責某項計算。
Map
(Map階段):Map是MapReduce程式執行的第一個階段,Map階段的目的是將輸入的資料,進行切分。將一個大檔案,切分為若干小部分!切分後,每個部分稱為1片(split
),每片資料會交給一個Task(程式),Task負責Map階段程式的計算,稱為MapTask
Reduce
(Reduce階段): Reduce是MapReduce程式執行的第二個階段(最後一個階段)!Reduce階段的目的是將Map階段的每個MapTask計
算後的結果進行合併彙總!得到最終結果!Reduce階段是可選的,Task負責Reduce階段程式的計算,稱為ReduceTask,一個Job可以通過設定,啟動N個ReduceTask,這些ReduceTask也是並行執行!每個ReduceTask最終都會產生一個結果。
MapReduce中常用的元件
①Mapper
:map階段核心的處理邏輯
②Reducer
: reduce階段核心的處理邏輯
③InputFormat
:輸入格式
- MR程式必須指定一個輸入目錄,一個輸出目錄
- InputFormat代表輸入目錄中檔案的格式
- 如果是普通檔案,可以使用
FileInputFormat
- 如果是SequeceFile(hadoop提供的一種檔案格式),可以使用
SequnceFileInputFormat
- 如果處理的資料在資料庫中,需要使用
DBInputFormat
④RecordReader
: 記錄讀取器
- RecordReader負責從輸入格式中,讀取資料,讀取後封裝為一組記錄
(k-v)
⑤OutPutFormat
: 輸出格式
- OutPutFormat代表MR處理後的結果,要以什麼樣的檔案格式寫出
- 將結果寫出到一個普通檔案中,可以使用
FileOutputFormat
- 將結果寫出到SequeceFile中,可以使用
SequnceFileOutputFormat
- 將結果寫出到資料庫中,可以使用
DBOutPutFormat
⑥RecordWriter
: 記錄寫出器
- RecordWriter將處理的結果以什麼樣的格式,寫出到輸出檔案中
⑦Partitioner
: 分割槽器
- 分割槽器,負責在Mapper將資料寫出時,將
keyout-valueout
,為每組keyout-valueout打上標記,進行分割槽 - 目的: 一個ReduceTask只會處理一個分割槽的資料!