1. 程式人生 > >我是菜鳥:hadoop之mapreduce設計理念和基本架構

我是菜鳥:hadoop之mapreduce設計理念和基本架構

MapReduce 是一個分散式計算框架,由 程式設計模型 和執行時環境 2部分組成。
程式設計模型為使用者提供了非常易用的程式設計介面,使用者只需要像編寫序列程式那樣實現幾個簡單的函式即可以完成一個分散式程式。
而複雜的節點間通訊,節點實效,資料切分,都有MapReduce執行時環境完成,無需使用者關心這些細節。

MRv1 第一代MapReduce計算框架

程式設計模型:
將問題抽象成Map和Reduce兩個階段。其中Map階段將輸入的資料解析成key/value,迭代呼叫map()函式處理後,再以key/value的形式輸出到本地目錄; Reduce階段將key相同的value進行規約處理,最終將結果輸出到HDFS上。其中執行時環境由JobTracker 和 TaskTracker完成, 其中JobTracker 主要負責資源管理和所有的作業排程控制,而TaskTracker負責接收來自jobTracker的命令和執行。

MRv2

將JobTracker中的資源管理和作業控制功能分開,分別由不同程序ResourceManager 和ApplicationMaster實現。

MapReduce設計目標

. 易於程式設計
. 良好的擴充套件性,增加節點達到線性擴充套件叢集
. 高容錯性 通過計算遷移和資料遷移 等策略來提高叢集的可用性和容錯性。

程式設計模型 概述

關鍵字: Map, Reduce
使用者只是需要編寫map()和reduce()2個函式。
map( ): 以key/value作為輸入,以另外的key/value作為中間輸出到本地磁碟。
Reduce( ): 以key/value列表作為輸入,經合併key相同的value後,產生另外一些列的key/value對作為最終輸出寫入hdfs。

MapReduce能夠解決的問題

任務可以被分解成多個相對獨立的子問題,待並行處理完這些子問題後,任務也就完成。
如:分散式Grep,URL訪問頻率統計,分散式排序, top K, k-means 聚類等,而不能解決的問題如Fibonacci 數值計算,因為結果需要依賴於前面的計算。

HDFS架構

HDFS架構主要採取了master/slave架構,主要由Client, NameNode, SecondaryNameNode 和 DataNode 4個部分組成。

MapReduce 架構

MR 也採用了Master/Slave架構, 主要由Client, JobTracker, TaskTracker 和Task組成。

MapReduce作業執行週期

Client 提交 job 到 jobTracker,;
jobTracker 將作業分解成若干的Task, 並對這些task進行排程和監控,以保障這些程式的正確執行;
TaskTracker 啟動Task, 並向JobTracker回報這些Task的執行狀態和本節點上的資源使用情況;
任務完成。