MapReduce架構設計

jopen 11年前發布 | 46K 次閱讀 MapReduce 軟件架構

MapReduce采用Master/Slave的架構,其架構圖如下:

1.jpeg

 

它主要有以下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的關系如下圖所示:

2.jpeg

 

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

3.jpeg

 

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

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

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

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

4.jpeg

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!