Google MapReduce / Hadoop 採用兩階段分治:
關鍵創新:中間檔案 解耦 Map/Reduce,賦予無限水平擴展能力。
| 概念 | Hadoop | Google 論文 | 說明 |
|---|---|---|---|
| 計算請求 | Job | Job | 用戶提交的單一計算任務 |
| 管理服務 | JobTracker | Master | 單點,負責任務分派、狀態追蹤、容錯 |
| 執行服務 | TaskTracker | Worker | 運行 Map/Reduce 任務,心跳回報 |
| 執行單元 | Task | Task | Map Task / Reduce Task / Setup / Cleanup |
| 推測執行 | Speculative Task | Backup Task | 對慢速/失敗任務在別節點重跑,採先完成者結果 |
JobSubmissionProtocol (提交) / InterTrackerProtocol (心跳/指令)。通訊協議:Hadoop 以 RPC + Protocol 介面解耦,Client↔TaskTracker 無直連,統由 JobTracker 協調。
Mapper、Reducer、Partitioner 等介面。JobConf 設定輸入/輸出路徑、類別、格式類 (InputFormat/OutputFormat)。JobClient.runJob(conf) → JobSubmissionProtocol.submitJob() 提交 → 輪詢 getTaskCompletionEvents() 監控。JobInProgress,按 HDFS 區塊位置預分派 Map Task 到對應 TaskTracker (資料局部性)。TaskScheduler (可插拔) 決定分派策略:預設 JobQueueTaskScheduler 依優先級分配,保留高優先級任務槽位。JobInProgress.findNewMapTask() 從近到遠尋找未分派任務,支援推測執行重跑。TaskLauncher 線程啟動 MapTaskRunner → TaskRunner 下載資源 → JvmManager 池化管理 JVM 子進程。Child.main() 解析參數,實例化 Mapper 執行 map()。collect() 直接寫本地檔 (簡單但 IO 密集)。ReduceCopier 多執行緒並行下載,同步進行記憶體/磁碟歸並合併。RecordWriter + OutputFormat)。SkippingRecordReader 記錄讀取位置,失敗重試時跳過壞記錄 (位置資訊經心跳上報 JobTracker)。JobHistory 日誌 (存 HDFS) + RecoveryManager 重放狀態,支援遷移部署。