[TOC]
## 簡介
一種分布式的計算方式指定一個Map(映#x5C04;)函數,用來把一組鍵值對映射成一組新的鍵值對,指定并發的Reduce(歸約)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組。
## Pattern

~~~
map: (K1, V1) → list(K2, V2)
combine: (K2, list(V2)) → list(K2, V2)
reduce: (K2, list(V2)) → list(K3, V3)
~~~
Map輸出格式和Reduce輸入格式一定是相同的
## 基本流程
MapReduce主要是先讀取文件數據,然后進行Map處理,接著Reduce處理,最后把處理結果寫到文件中

## 詳細流程

## 多節點下的流程

## 主要過程

### Map Side
### Record reader
記錄閱讀器會翻譯由輸入格式生成的記錄,記錄閱讀器用于將數據解析給記錄,并不分析記錄自身。記錄讀取器的目的是將數據解析成記錄,但不分析記錄本身。它將數據以鍵值對的形式傳輸給mapper。通常鍵是位置信息,值是構成記錄的數據存儲塊.自定義記錄不在本文討論范圍之內.
### Map
在映射器中用戶提供的代碼稱為中間對。對于鍵值的具體定義是慎重的,因為定義對于分布式任務的完成具有重要意義.鍵決定了數據分類的依據,而值決定了處理器中的分析信息.本書的設計模式將會展示大量細節來解釋特定鍵值如何選擇.
### Shuffle and Sort
ruduce任務以隨機和排序步驟開始。此步驟寫入輸出文件并下載到本地計算機。這些數據采用鍵進行排序以把等價密鑰組合到一起。
### Reduce
reducer采用分組數據作為輸入。該功能傳遞鍵和此鍵相關值的迭代器。可以采用多種方式來匯總、過濾或者合并數據。當ruduce功能完成,就會發送0個或多個鍵值對。
### 輸出格式
輸出格式會轉換最終的鍵值對并寫入文件。默認情況下鍵和值以tab分割,各記錄以換行符分割。因此可以自定義更多輸出格式,最終數據會寫入HDFS。類似記錄讀取,自定義輸出格式不在本書范圍。