前言
在提到大數據分析時,常常會提到 Hadoop 或是 Spark 等工具,而對於 Hadoop 稍微了解的朋友就會知道 Hadoop 的兩大核心就是 HDFS(Hadoop Distributed File System) 和 Map-Reduce。本篇就來介紹 Map-Reduce 到底是甚麼 !
正文
Map-Reduce 基本概念
其實 Map-Reduce 是一種開發模式,或是可以理解為一種編程範式。過程其實可以拆解為許多步驟,而最主要的核心就是 Map 和 Reduce 兩步驟。
下圖以一個例子和流程說明 Map-Reduce 模型的完整流程。
以下來一一分析每一步驟的目的和做法。
input
input的是要計算的原始信息,以上圖為例其實就是一堆文字清單。
split
split做的就是將原始信息分組,作分散處理。以 Hadoop 而言,就會把原始信息 split 到不同的 cluster 等待近一步處理。
map
map 就是一直提到的 Map-Reduce 模型的 Map 操作。map 操作會把經過 split 的 cluster 建立形如 (key, value) 的鍵值對。key 就是信息本身,value 都為 1 表示出現一次。
combine
combine 其實可以看成 map 操作的一部份,要先將每個 cluster 中 key 一樣的鍵值對先進行一次加總,避免傳出過多冗余得信息。
shuffle & sort
shuffle & sort 就是在 reduce 前一步,會將每個 cluster 中 key 相同的先合併成一個新的 cluster,並按 key 大小(自定義)先進行一次排序(為了使提高結果可讀性)。
reduce
reduce 就是一直提到的 Map-Reduce 模型的 reduce 操作。做的是實際的加總,將每個 cluster 中的 value 進行一次加總化簡,使每個 cluster 被 reduce 成只剩一個鍵值對。
output
將每個 cluster 合併作為最終結果輸出。
簡單來說,可以將整個 Map-Reduce 模型拆分為 Map 和 Reduce 兩階段。
Map 階段基本上會做 filtering 和 sorting 並且傳出一個(key, value)做結果(以wordcount為例,每一個字會作為最後的key,而value則是1代表有一筆)
Reduce階段基本上會做整合(以wordcount為例,從Map傳過來的key如果一樣,表示同一個字,因此把一樣的key做加總最後的出總筆數
結語
最近小白我也才剛開始接觸大數據相關的技術棧,學習到 Hadoop 似乎必須得清楚 Map-Reduce 的概念,所幸整理了下自己的理解。希望這篇對同是初學者的你們有幫助,若有錯誤也歡迎各位大老們指教。