MapReduce 的強項是「把超大量、分散在許多機器上的資料,做同一種規則的平行處理,再把結果彙整」。它最常見在離線批次任務:清洗、統計、聚合、排序、建立索引等。幾個實際用途與案例:
- 搜尋引擎的倒排索引(Inverted Index)
- Map:讀網頁 → 斷詞 → 輸出 (term, docID)
- Reduce:同一 term 的 docID 清單合併、去重與位置資訊彙整 → 生成倒排索引
- 大規模日誌分析(網站/APP/IoT)
- Map:解析每行 Nginx/APP log → 輸出 (url, 1)、(userId, bytes) 等
- Reduce:按 key 加總 → PV/UV、流量、錯誤率、最常見的 404 路徑
- ETL 與資料清洗
- Map:解析原始 CSV/JSON,欄位校正、缺值處理、標準化 → 輸出 (entityId, normalizedRecord)
- Reduce:同一 entity 聚合最新/最佳紀錄、合併多來源欄位 → 產出乾淨事實表
- 去重與唯一計數(De-dup / Distinct)
- Map:輸出 (fingerprint/hash, 1)
- Reduce:同 hash 彙整 → 判斷是否重複、計算唯一數量(如唯一裝置數)
- 點擊串流的會話化(Sessionization)
- Map:輸出 (userId, event)
- Reduce:依 userId 時序排序,切分 30 分鐘無操作為新 session → 計算平均停留/轉換
- 大資料排序 / 基準測試(TeraSort 類)
- Map:讀入記錄並發出帶排序鍵的 pair
- Reduce:分區後於每個 reducer 內排序 → 產生全域有序輸出
- 機器學習前處理(特徵工程的批次管線)
- Map:抽取特徵(字頻、統計量、類別編碼)
- Reduce:對使用者或 item 聚合特徵(例如 7 日平均、點擊次數、共現次數)→ 餵給後續訓練
- 生物資訊與科學運算(序列統計/片段比對的預聚合)
- Map:將基因讀段切片、計數 k-mer
- Reduce:彙整 k-mer 分佈,用於後續比對或變異檢測
什麼時候選 MapReduce?
- 超大規模、可被分割成「獨立記錄級別」的平行計算,而且不在乎延遲(分鐘~小時級)。
- 任務以一次性批次為主:生成報表、離線特徵、每日索引、月結算。
什麼時候不要?
- 需要低延遲/互動式查詢或記憶體內反覆計算(機器學習迭代訓練、圖演算法),通常改用 Spark、Flink 或資料倉儲/向量資料庫等。
如果你正在規劃企業內的資料管線,可以把 MapReduce 視為「耐操的批次磚頭工」:前期把原始資料整平、清洗、聚合,後面再接即時引擎或倉儲做分析與可視化。
~鈳恩智聯,莊濠禧