Hadoop- MapReduce分佈式計算框架原理

分佈式計算:  

原則:移動計算而儘量減小移動數據(減小網絡開銷)編程

分佈式計算其實就是將單臺機器上的計算拓展到多臺機器上並行計算。網絡

 

MapReduce是一種編程模型。Hadoop MapReduce採用Master/slave 結構。只要按照其編程規範,只須要編寫少許的業務邏輯代碼便可實現一個強大的海量數據併發處理程序。核心思想是:分而治之。Mapper負責分,把一個複雜的業務,任務分紅若干個簡單的任務分發到網絡上的每一個節點並行執行,最後把Map階段的結果由Reduce進行彙總,輸出到HDFS中,大大縮短了數據處理的時間開銷。MapReduce就是以這樣一種可靠且容錯的方式進行大規模集羣海量數據進行數據處理,數據挖掘,機器學習等方面的操做。

MapReduce分佈式計算框架體系結構

首先理解幾個概念:併發

Master:是整個集羣的惟一的全局管理者,功能包括:做業管理、狀態監控和任務調度等,即MapReduce中的JobTracker
slave:負責任務的執行和任務狀態回報,即MapReduce中的TaskTracker
 

Job&Task:在hadoop mapreduce中,一個 Job 它是一個任務,主業務。一個Job 能夠拆分紅多個Task,map Task與reduce Task。app

 

JobTracker:JobTracker是一個後臺服務進程,啓動以後,會一直監聽並接收來自各個TaskTracker發送的心跳信息,包括資源使用狀況和任務運行狀況等信息 框架

JobTracker的主要功能:
做業控制:在hadoop中每一個應用程序被表示成一個做業,每一個做業又被分紅多個任務,JobTracker的做業控制模塊則負責做業的分解和狀態監控。
最重要的狀態監控:主要包括TaskTracker狀態監控、做業監控和任務狀態監控。主要做用:容錯和爲任務調度提供決策依據。
資源管理。
TaskTracker:TaskTracker是JobTracker和Task之間的橋樑:一方面,從JobTracker接收並執行各類命令:運行任務、殺死任務等;另外一方面講本地節點上各個任務狀態經過心跳週期性彙報給JobTracker。TaskTracker與JobTracker和Task之間採用了RPC協議進行通訊。
TaskTracker的功能:
彙報心跳:Tracker週期性講全部節點上各類信息經過心跳機制彙報給JobTracker。這些信息包括兩部分:
*機器級別信息:節點健康狀況,資源使用狀況等。
*任務級別信息:任務執行進度、任務運行狀態等。
 執行命令:JobTracker會給TaskTracker下達各類命令,主要包括:啓動任務(LaunchTaskAction)、提交任務(CommunitTaskAction),殺死任務(KillJobAction)和從新初始化(TaskTrackerReinitAction)。

 

MapReduce體系結構裏有兩類節點,第一個是JobTracker,它是一個master管理節點,另外一個是TaskTracker。客戶端(Client)提交一個任務(Job),JobTracker把他提交到候選列隊裏,將Job拆分紅map任務(Task)和reduce任務(Task),把map任務和reduce任務分給TaskTracker執行。在mapreduce編程模型裏,Task通常起在和DataNode所在的同一臺物理機上。以下圖(圖片來自網絡):機器學習

 

MapReduce分佈式工做流程

1.分佈式的運算程序每每須要分紅至少2個階段分佈式

  MapReduce的第一階段是Map,運行的實例叫Map Task,第二階段是Reduce,運行的實例叫Reduce Task。每一個Task只須要完成後把文件輸出到本身的工做目錄便可。oop

2.第一階段的Task併發實例各司其職,各自爲政,互不相干,徹底並行學習

3.第二階段的Task併發實例互不相干,可是他們的數據以來於上一階段的全部Task併發實例的輸出spa

4.MapReduce編程模型,只能包含一個Map階段和一個Reduce階段,若是用戶的業務邏輯很是複雜,那就只能來多個mapreduce程序,串行運行

MapReduce容錯機制

   MapReduce的第一階段是Map,運行的實例叫Map Task,第二階段是Reduce,運行的實例叫Reduce Task。第二階段Reduce要等第一階段Map上的Map Task完成以後才能開始。若是Map Task運行失敗,如何處理?
這時候就要啓動mapreduce的容錯機制了,它容許整個執行過程當中TaskTracker中間出現宕機,發生故障,JVM發生重啓等等這些狀況,容許它出錯。處理的方式:
1.重複執行
  有多是job自己問題,硬件問題,數據的問題都有可能,默認會從新執行,若是從新執行4次都失敗就放棄執行。
2.推測執行
  因爲要Map端全部任務執行完纔會執行reduce任務,可能存在某個節點完成的特別慢,JobTracker發現它很慢的時候,說明它出現了問題,另外找一臺TaskTrack執行同一任務,哪一個先完成就取該結果,結束另外一個TaskTracker。

總結

以上知識體系基本能解決一下幾個問題了:

1.你的MapTask如何進行任務分配?
2.ReduceTask如何分配要處理的任務?
3.MapTask和ReduceTask之間如何銜接?
4.若是某MapTask運行失敗,如何處理?
master監控到有MapTask失敗就會啓動在另外一臺機器上啓動maptask,主要由MapReduce容錯機制處理。詳情看上面的MapReduce容錯機制。
5.mapreduce若是都須要本身本身負責輸出的分區,很麻煩,因此有一個master管理,MapTask只須要把文件輸出到本身的工做目錄便可,ReduceTask執行時由master中的管理節點JobTracker把MapTask的資源調動給ReduceTask,發揮資源管理做用。
 
 MapReduce運行的兩種模式
 MapReduce運行模式分爲兩種,本地模式和運行在yarn上
拓展:MapReduce的輸出目錄原則上是不能存在的,已經存在的話會報錯。
相關文章
相關標籤/搜索