1. 程式人生 > 實用技巧 >MapReduce計算框架的核心程式設計思想

MapReduce計算框架的核心程式設計思想

@ 目錄

概念

Job(作業) : 一個MapReduce程式稱為一個Job。

MRAppMaster(MR任務的主節點): 一個Job在執行時,會先啟動一個程式,這個程式稱為MRAppMaster,負責Job中執行狀態的監控,容錯,和RM申請資源,提交Task等。

Task(任務): Task是一個程式,負責某項計算。

Map(Map階段):Map是MapReduce程式執行的第一個階段,Map階段的目的是將輸入的資料,進行切分。將一個大檔案,切分為若干小部分!切分後,每個部分稱為1片(split),每片資料會交給一個Task(程式),Task負責Map階段程式的計算,稱為MapTask

。在一個MR程式的Map階段,會啟動N(取決於切片數)個MapTask。每個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只會處理一個分割槽的資料!