1. MapReduce 定義
- MapReduce 是一個分布式運算程序的編程框架,是用戶開發“基於Hadoop的數據分析應用”的核心框架。
- MapReduce 核心功能是將用戶編寫的業務邏輯代碼和自帶默認組件整合成一個完整的分布式運算程序,並發運行在一個Hadoop集群上。
2. MapReduce 優缺點
- 優點:
- 易於編程;
- 良好的擴展性;
- 高容錯性;
- 適合PB級以上海量數據的離線處理;
缺點: - 不擅長實時計算;
- 不擅長流式計算;
- 不擅長DAG(有向圖)計算;
3. MapReduce 核心思想
- MapReduce 運算程序一般需要分成兩個階段:Map階段和Reduce階段;
===================
3.1 MapReduce 進程
- 一個完整的MapReduce程序在分布式運行時,有三類實例進程:
MrAppMaster
: 負責整個程序的過程調度及狀態協調;MapTask
: 負責Map階段的整個數據處理流程;ReduceTask
: 負責Reduce階段的整個數據處理流程;
4. MapReduce 編程規范
-
用戶編寫的程序分成三個部分:Mapper,Reducer 和 Driver;
-
Mapper 階段:
- 用戶自定義的 Mapper 要繼承自己的父類;
- Mapper 的輸入數據是KV對的形式(KV的類型可自定義);
- Mapper 中的業務邏輯寫在map()方法中;
- Mapper 的輸出數據是KV對的形式(KV的類型可自定義);
- map()方法(MapTask進程)對每一個<K,V>調用一次;
-
Reducer 階段:
- 用戶自定義的Reducer要繼承自己的父類;
- Reducer 的輸入數據類型對應 Mapper 的輸出類型,也是KV;
- Reducer 的業務邏輯寫在 reduce() 方法中;
- ReduceTask 進程對每一組相同K的<K,V>組調用一次 reduce() 方法;
-
Driver 階段
- 相當於YARN集群的客戶端,用於提交我們整個程序到YARN集群,提交的是封裝了MapReduce程序相關運行參數的job對象;