MapReduce 核心架構入門

在大數據處理上,MapReduce 可以說是非常具備代表性的一代框架,尤其是在以 Hadoop 爲首的離線批處理框架當中,MapReduce 是核心的數據處理引擎,而隨後的 Spark 其實也是在 MapReduce 基礎之上發展而來的。今天的大數據開發學習分享,我們就主要來講講 MapReduce 核心架構。

MapReduce 支持大規模數據集的處理,主要的思想是分佈式並行計算,通過將大的任務進行拆分,小任務並行計算,大大提升了大規模數據處理的效率問題。

MapReduce 架構成員

通常來說,MapReduce 計算引擎的核心架構,包括有 Client、Job Tracker、TaskTracker 以及 Task。

Client

Client 的含義是指用戶使用 MapReduce 程序通過 Client 來提交任務到 Job Tracker 上,同時用戶也可以使用 Client 來查看一些作業的運行狀態。

Job Tracker

Job Tracker 負責的是資源監控和作業調度。JobTracker 會監控着 TaskTracker 和作業的健康狀況,會把失敗的任務轉移到其他節點上,同時也監控着任務的執行進度、資源使用量等情況,會把這些消息通知任務調度器,而調度器會在資源空閒的時候選擇合適的任務來使用這些資源。

TaskTracker

TaskTracker 會週期性地通過 Hearbeat 來向 Job Tracker 彙報自己的資源使用情況和任務的運行進度。會接受來自於 JobTaskcker 的指令來執行操作(例如啓動新任務、殺死任務之類的)。

在 TaskTracker 中通過的是 slot 來進行等量劃分一個節點上資源量,只用 Task 獲得 slot 的時候纔有機會去運行。調度器的作用就是進行將空閒的 slot 分配給 Task 使用,可以配置 slot 的數量來進行限定 Task 上的併發度。

Task

Task 分爲 Map Task 和 Reduce Task,在 MapReduce 中的 split 就是一個 Map Task,split 的大小可以設置的,由 mapred.max.spilt.size 參數來設置,默認是 Hadoop 中的 block 的大小,在 Hadoop 2.x 中默認是 128M,在 Hadoop 1.x 中默認是 64M。

MapReduce 架構設計

作業的提交和初始化

由用戶提交作業之前,需要先把文件上傳到 HDFS 上,JobClient 使用 upload 來加載關於打包好的 jar 包,JobClient 會 RPC 創建一個 JobInProcess 來進行管理任務,並且創建一個 TaskProcess 來管理控制關於每一個 Task。

JobTracker 調度任務

JobTracker 會調度和管理任務,一發現有空閒資源,會按照一個策略選擇一個合適的任務來使用該資源。

任務調度器有兩個點:一個是保證作業的順利運行,如果有失敗的任務時,會轉移計算任務,另一個是如果某一個 Task 的計算結果落後於同一個 Task 的計算結果時,會啓動另一個 Task 來做計算,最後取計算結果最塊的那個。

任務運行環境

TaskTracker 會爲每一個 Task 來準備一個獨立的 JVM 從而避免不同的 Task 在運行過程中的一些影響,同時也使用了操作系統來實現資源隔離防止 Task 濫用資源。

執行任務

每個 Task 的任務進度通過 RPC 來彙報給 TaskTracker,再由 TaskTracker 彙報給 JobTracker。

任務結束,寫入輸出的文件到 HDFS 中。

總結:時至今日,MapReduce 仍然是大數據分佈式處理的重要指導思想,學習當中需要更加深入地去理解和掌握。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/1vpVMjUYR95DXf-zJ-evVA