[Hadoop] MapReduce架構設計


上一篇介紹了HDFS的架構設計(http://blog.csdn.net/u010415792/article/details/9055569),本篇是它的姊妹篇,介紹MapReduce的架構設計。

和HDFS一樣,MapReduce也是采用Master/Slave的架構,其架構圖如下:



它主要有以下4個部分組成:

1)Client

2)JobTracker

JobTracke負責資源監控和作業調度。JobTracker 監控所有TaskTracker 與job的健康狀況,一旦發現失敗,就將相應的任務轉移到其他節點;同時,JobTracker 會跟蹤任務的執行進度、資源使用量等信息,並將這些信息告訴任務調度器,而調度器會在資源出現空閑時,選擇合適的任務使用這些資源。在Hadoop 中,任務調度器是一個可插拔的模塊,用戶可以根據自己的需要設計相應的調度器。

3)TaskTracker

TaskTracker 會周期性地通過Heartbeat 將本節點上資源的使用情況和任務的運行進度匯報給JobTracker,同時接收JobTracker 發送過來的命令並執行相應的操作(如啟動新任務、殺死任務等)。TaskTracker 使用“slot”等量划分本節點上的資源量。“slot”代表計算資源(CPU、內存等)。一個Task 獲取到一個slot 后才有機會運行,而Hadoop 調度器的作用就是將各個TaskTracker 上的空閑slot 分配給Task 使用。slot 分為Map slot 和Reduce slot 兩種,分別供MapTask 和Reduce Task 使用。TaskTracker 通過slot 數目(可配置參數)限定Task 的並發度。

4)Task

Task 分為Map Task 和Reduce Task 兩種,均由TaskTracker 啟動。HDFS 以固定大小的block 為基本單位存儲數據,而對於MapReduce 而言,其處理單位是split。split 是一個邏輯概念,它只包含一些元數據信息,比如數據起始位置、數據長度、數據所在節點等。它的划分方法完全由用戶自己決定。但需要注意的是,split 的多少決定了Map Task 的數目,因為每個split 只會交給一個Map Task 處理。Split 和 Block的關系如下圖所示:



Map Task 執行過程如下圖 所示。由該圖可知,Map Task 先將對應的split 迭代解析成一個個key/value 對,依次調用用戶自定義的map() 函數進行處理,最終將臨時結果存放到本地磁盤上,其中臨時數據被分成若干個partition,每個partition 將被一個Reduce Task 處理。



Reduce Task 執行過程下圖所示。該過程分為三個階段:

①從遠程節點上讀取MapTask 中間結果(稱為“Shuffle 階段”);

②按照key 對key/value 對進行排序(稱為“Sort 階段”);

③依次讀取<key, value list>,調用用戶自定義的reduce() 函數處理,並將最終結果存到HDFS 上(稱為“Reduce 階段”)。



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM