1. 程式人生 > >MapReduce 之一:MapReduce體系結構

MapReduce 之一:MapReduce體系結構

MapReduce是一種分散式並行程式設計。分散式程式執行在大規模計算機叢集上,可以並行執行大規模資料任務,從而獲得海量的計算能力。

MapReduce相對傳統的平行計算框架

傳統平行計算框架 MapReduce
叢集架構容錯性 共享式(共享記憶體/g共享儲存).容錯性差
硬體/價格/擴充套件性 刀鋒伺服器、高速網、SAN、價格貴、擴充套件性差
程式設計/學習難度
適用場景 實時、細粒度計算、計算密集型

MapReduce框架

  • MapReduce將複雜的,執行大規模叢集上的平行計算過程高度地抽象兩個函式:Map和Reduce+ + MapReduce採用“分而治之”策略,將一個分散式檔案系統中的大規模資料集,分成許多獨立的分片。這些分片可以被多個Map任務並行處理。
  • MapReduce設計的一個理念就是“計算向資料靠攏”,而不是“資料向計算靠攏”,原因是,移動資料需要大量的網路傳輸開銷
  • MapReduce框架採用了Master/Slave架構,包括一個Master和若干個Slave,Master上執行JobTracker,Slave執行TaskTracker
  • Hadoop框架是用JAVA來寫的,但是,MapReduce應用程式則不一定要用Java來寫。

Map函式和Reduce函式

這裡寫圖片描述

MapReduce體系架構

這裡寫圖片描述

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

  • 1.Client
    • 使用者編寫的MapReduce程式通過Client提交到JobTracker
    • 使用者可通過Client提供一些介面檢視作業的執行狀態
  • JobTracker
    • Jobtracker負責資源監控和作業排程
    • JobTracker監控所有TaskTracker與job的健康情況
      + JobTracker會跟蹤任務的執行進度、資源使用量等訊息,並將這些訊息告知(TaskScheduler)
      而任務排程器會在資源出現空閒時,選擇合適的任務去執行。
  • Tasktracker
    + TaskTracker會週期性通過“心跳”把資源使用情況和任務進度彙報給JobTracker,同時接收JobTracker傳送過來的命令執行相應的操作
    • TaskTracker使用“slot”等量劃分本節點的資源量,一個Task獲得slot後才執行,而Hadoop排程器的作用就是將各個TaskTracker上的空閒slot分配給Task使用,slot分為 Map slot和reduce slot兩種,分別給相應的MapTask和reduceTask使用
  • Task
    Task分為Map Task和Reduce Task兩種,均由TaskTracker啟動