CHAPTER 6 認識MapReduce
Outline 什麼是MapReduce MapReduce的運作原理 MapReduce的特性
什麼是MapReduce MapReduce的運作原理 MapReduce的特性
Hadoop Distributed File System (HDFS) 什麼是MapReduce? MapReduce是由Google所提出的一套平行程式架構 主要是用來處理大量資料 擁有可靠的容錯機制 採用了類似Divide-and-Conquer的觀念 啟發自函數編程中常用的 Map (映射)函數 Reduce (化簡)函數 Hadoop Distributed File System (HDFS) MapReduce Hbase A Cluster of Machines Cloud Applications
MapReduce一些專業術語 Job Master node Task Slave nodes JobTracker Map 任務 Task 小工作 JobTracker 任務分派者 TaskTracker 小工作的執行者 Client 發起任務的客戶端 Master node 控制節點 Slave nodes 工作節點 Map 對應 Reduce 總和
Nodes, Trackers, Tasks JobTracker TaskTracker 運行在 Master node 上 接受clients端發送的工作 TaskTracker 運行在 Slave nodes上 獨立執行所分派的小工作
MapReduce 與<Key, Value>關係 Select key Input Output Input Output Key1 val Key1 val val Key2 val Key values Data val … … … Reducer Map
MapReduce: High Level
什麼是MapReduce MapReduce的運作原理 MapReduce的特性
MapReduce的基本原理運作圖 使用者的程式 (1)配置 (1)配置 (1)配置 Master機器 (2)分配Reduce 任務 GFS或HDFS 檔案系統 (2)分配Map 任務 本地磁碟的 內部檔案 GFS或HDFS 檔案系統 Map 中間值0 (6)寫入 中間值1 Reduce 資料0 (3)讀取 (4)本地寫入 輸出結果0 資料1 Map 中間值0 (5)遠端讀取 資料2 輸出結果1 中間值1 Reduce 資料3 Map 資料4 中間值0 中間值1 輸入檔案 Map階段 Reduce階段 輸出檔案 本地磁碟的 中介檔案
Wordcount範例 Input Output Sort/Copy Mapper Merge Cat Dog Cat 2 Reducer Pig 2 Cat 1 Cat [1 1] Pig [1 1] Cat 1 Pig 1 Pig 1 Mapper Pig FIsh Pig 1 FIsh 1 FIsh 1 Reducer Dog 1 FIsh 2 Cat Pig Dog Dog[1] Fish [1 1] FIsh 1 FIsh 1 Mapper FIsh Cat 1 Pig 1
( (Text) value ).toString(); Mapper流程 Hi Cloud say Hi Input Key StringTokenizer itr = new StringTokenizer( line); ( (Text) value ).toString(); Hi Cloud say Hi /user/hadoop/input/hi … Hi Cloud say Hi itr itr itr itr itr while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } <word, one> Input Value <Hi, 1> <Cloud, 1> <say, 1> <Hi, 1>
Reducer流程 <word, one> <Hi, 1 → 1> <Cloud, 1> <say, 1> Hi 1 1 <key, result> <Hi, 2> <Cloud, 1> <say, 1>
什麼是MapReduce MapReduce的運作原理 MapReduce的特性
MapReduce的特性 可以提供高度的可靠性運算 可以提供容錯機制 可以降低網路傳輸的頻寬需求 可以提供負載平衡