一、Client併發
用戶編寫的MapReduce程序經過Client提交到JobTracker端;同時,用戶可經過Client提供的一些接口查看做業運行狀態。在Hadoop內部用「做業」Job表示MapReduce程序。一個MapReduce程序可對應若干個做業,而每一個做業會被分解成若干個Map/Reduce任務(Task)。函數
二、JobTrackeroop
JobTracker主要負責做業調度和資源監控。設計
做業調度:監控全部TaskTracker與做業的健康情況,一旦發現失敗狀況後,其會將相應的任務轉移到其它節點。排序
資源監控:JobTracker會跟蹤任務執行進度、資源使用量等信息,並將這些信息告訴任務調度器,而調度器會在資源出現空閒時,選擇合適的任務使用這些資源。在Hadoop中任務調度器是一個可插撥的模塊,可自行設計。接口
三、TaskTracker資源
TaskTracker會週期性地經過Heartbeat將本節點上資源的使用狀況和任務的運行進度彙報給JobTracker,同時接收JobTracker發送過來的命令並執行相應的操做(如啓動新任務、殺死任務等)。it
TaskTracker使用"slot"等量劃分本節點上的資源量。」slot「表明計算資源。一個Task獲取一個slot後纔有機會運行。而Hadoop調度器的做用就是將各個TaskTracker上的空閒slot分配給Task使用。slot分爲Map slot和Reduce slot兩種,分別供Map Task和Reduce Task使用。TaskTracker經過slot數目限定Task的併發度。io
四、Task監控
Task分爲Map Task 和Reduce Task兩種,均由TaskTracker啓動。HDFS以固定大小的block爲基本單位存儲數據,而對MapReduce而言,其處理單位是split。split與block的對應關係以下圖
split是一個邏輯概念,它只包含一些元數據信息,好比數據起始位置、數據長度、數據所在節點等.劃分方法徹底由用戶本身決定。split的多少決定Map Task數量,一個split對應一個Map Task。
Map Task執行過程以下圖:
Map Task先將對應的split迭代解析成一個key/value對,依次調用map函數進行處理,並將處理結果存放在本地磁盤,其中臨時數據被分爲若干個partition,每一個partition將被一個Reduce Task處理。
Reduce Task執行過程以下圖:
該過程分爲三個階段:一、shuffle階段,從遠程節點上讀取Map Task中間結果;二、Sort階段,按照key對key/value進行排序;三、reduce階段,依次讀取<key,value list>,調用reduce函數處理,並存入HDFS。