mapreduce工作原理


  MapReduce模型主要包含Mapper類和Reducer類兩個抽象類。Mapper類主要負責對數據的分析處理,最終轉化為key-value數據對;Reducer類主要獲取key-value數據對,然后處理統計,得到結果。MapReduce實現了存儲的均衡,但沒有實現計算的均衡。

一. MapReduce框架組成

MapReduce主要包括JobClient、JobTracker、TaskTracker、HDFS四個獨立的部分。

1、JobClient

  配置參數Configuration,並打包成jar文件存儲在HDFS上,將文件路徑提交給JobTracker的master服務,然后由master創建每個task將它們分發到各個TaskTracker服務中去執行。

2、JobTracker

  這是一個master服務,程序啟動后,JobTracker負責資源監控和作業調度。JobTracker監控所有的TaskTracker和job的健康狀況,一旦發生失敗,即將之轉移到其他節點上,同時JobTracker會跟蹤任務的執行進度、資源使用量等信息,並將這些信息告訴任務調度器,而調度器會在資源出現空閑時,選擇合適的任務使用這些資源。在Hadoop 中,任務調度器是一個可插拔的模塊,用戶可以根據自己的需要設計相應的調度器。

3、TaskTracker

  運行在多個節點上的slaver服務。TaskTracker主動與JobTracker通信接受作業,並負責直接執行每個任務。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 的並發度。

  Task分為Map Task和Reduce Task兩種,均由TaskTracker啟動。HDFS以block塊存儲數據,mapreduce處理的最小數據單位為split。split如何划分又用戶自由設置。如下為split和block之間的關系:

4. HDFS

  保存數據和配置信息等。

二、MapReduce程序運行過程

  1. 作業運行過程:首先向JobTracker請求一個新的作業ID;然后檢查輸出說明(如輸出目錄已存在)、輸出划分(如輸入路徑不存在);JobTracker配置好所有需要的資源,然后把作業放入到一個內部的隊列中,並對其進行初始化,初始化包括創建一個代表該正在運行的作業對象(封裝任務和記錄信息),以便跟蹤任務的狀態和進程;作業調度器獲取分片信息,每個分片創建一個map任務。TaskTracker會執行一個簡單的循環定期發送heartbeat給JobTracker,心跳間隔可自由設置,通過心跳JobTracker可以監控TaskTracker是否存活,同時也能獲得TaskTracker處理的狀態和問題,同時也能計算出整個Job的狀態和進度。當JobTracker獲得了最后一個完成指定任務的TaskTracker操作成功的通知時候,JobTracker會把整個Job狀態置為成功,然后當客戶端查詢Job運行狀態時候(注意:這個是異步操作),客戶端會查到Job完成的通知的。

  2. 邏輯角度分析作業運行順序:輸入分片(input split)、map階段、combiner階段、shuffle階段、reduce階段。

    1. input split:在map計算之前,程序會根據輸入文件計算split,每個input split針對一個map任務。input split存儲的並非是數據本身,而是一個分片長度和一個記錄數據的位置的數組。
    2. map階段:即執行map函數。
    3. combiner階段:這是一個可選擇的函數,實質上是一種reduce操作。combiner是map的后續操作,主要是在map計算出中間文件前做一個簡單的合並重復key值的操作。
    4. shuffle階段:指從map輸出開始,包括系統執行排序即傳送map輸出到reduce作為輸入的過程。另外針對map輸出的key進行排序又叫sort階段。map端shuffle,簡單來說就是利用combiner對數據進行預排序,利用內存緩沖區來完成。reduce端的shuffle包括復制數據和歸並數據,最終產生一個reduce輸入文件。shuffle過程有許多可調優的參數來提高MapReduce的性能,其總原則就是給shuffle過程盡量多的內存空間。
    5. reduce階段:即執行reduce函數並存到hdfs文件系統中。

  3. 作業調度器:目前hadoop的作業調度器主要有三種:

    1. 先進先出調度器:優點,算法簡單,JobTracker工作負擔輕;缺點忽略不同作業的需求差異。
    2. 容量調度器
    3. 公平調度器

三、MapReduce容錯

  hadoop的好處之一就是能處理輸入進程崩潰、機器故障、代碼錯誤等問題並能成功運行完成任務。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM