MapReduce 之一:MapReduce體系結構
阿新 • • 發佈:2019-01-11
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啟動