Hadoop-MapReduce的工作原理

簡介

MapReduce是工作于Hadoop之上的計算模型,可以將一個大型計算任務拆分為多個小的,可以在服務集群運行和計算的小任務,并將各個小任務計算結果匯總為一個計算結果;其過程主要分為Map階段和Reduce階段,MapReduce有1.0版本和2.0版本;
MapReduceV1主要概念:

  • JobTracker: 作用是接受任務,計算資源,分配資源與DataNode通信,同時還需要分解作業(yè)以及作業(yè)狀態(tài)監(jiān)控,其中作業(yè)監(jiān)控還包括:TaskTracker狀態(tài)監(jiān)控,作業(yè)狀態(tài)監(jiān)控和任務狀態(tài)監(jiān)控,以便為容錯和決策提供依據(jù);
  • TaskTracker:作用是連接JobTracker和Task,可以執(zhí)行JobTask的指令如:運行任務,提交任務,殺死任務等,也可以對任務狀態(tài)進行監(jiān)控,然后將任務信息通過心跳的方式發(fā)送給JobTracker;它們之間通過Avro實現(xiàn)的RPC進行通信;
  • Task: 分為MapTask和ReduceTask;
  • slots:是Hadoop節(jié)點資源管理的單位,表示具備的計算或者內(nèi)存等資源的容量或者能力;根據(jù)Map或者Reduce劃分為Map Slots和Reduce Slots,分別用來運行Map或者Reduce 任務;

MapReduceV2主要概念:

  • job:由客戶端向服務集群提交的一個計算作業(yè);
  • task:集群的最小可執(zhí)行單位,一個job可以拆分為多個task;
  • ResourceManager:集群計算資源管理器,用于管理整個集群的計算資源,一個集群只有一個ResourceManager,其主要任務是負責應用資源管理(AppicationManager)和作業(yè)的調(diào)度(Scheduler),接收jobSubmitter提交的作業(yè),根據(jù)作業(yè)上下文和從NodeManager收集來的狀態(tài),啟動調(diào)度過程,為每一個ApplicationMaster分配一個Container,同時會根據(jù)ApplicationMaster申請的map和reduce任務資源,分配合適的nodemanager;
  • NodeManager: 節(jié)點管理器,管理單臺服務器的計算資源,并會向ResourceManager匯報服務器狀態(tài),有點類似于V1版本中的TaskTracker;
  • ApplicationMaster:負責一個job生命周期的所有工作,監(jiān)控job的執(zhí)行情況,包括資源申請和task調(diào)度等;
  • Container:資源分配單位(slots的升級版,不需要根據(jù)map和reduce進行劃分,靈活分配),包括一些cpu和內(nèi)存資源;可以理解為一個jvm;

其新老版本架構圖如下:


MRV1&MRV2.jpg

工作原理

MRV1工作流程

MapReduceV1版本執(zhí)行流程圖如下:


MapReduceV1執(zhí)行過程.png
  1. jobClient運行一個Job;
  2. 向JobTracker申請一個Job Id;
  3. JobClient向HDFS上以JobId為名的文件夾上復制運行作業(yè)需要的資源文件,該資源文件包括MapReduce程序打包的.jar程序文件,配置文件以及客戶端計算所得的計算輸入劃分;jar程序一般會有10個備份,同時輸入劃分信息會告訴JobTracker為其創(chuàng)建多少個Map任務;
  4. JobTracker接收一個job作業(yè)后,會將其放入一個作業(yè)隊列,等待作業(yè)調(diào)度器進行調(diào)度;當調(diào)度器調(diào)度該作業(yè)時會獲取作業(yè)的資源文件,然后根據(jù)輸入劃分信息為每個劃分創(chuàng)建一個Map任務,交個一個TaskTracker進行執(zhí)行,同時TaskTracker會復制jar文件進行運行;對于Map任務和Reduce任務,TaskTracker會根據(jù)主機核數(shù)量和內(nèi)存大小分成固定數(shù)量的map槽和reduce槽,同時分配的TaskTracker必須包含該Map任務所需要處理的數(shù)據(jù)塊,這叫數(shù)據(jù)本地化,而Reduce任務無需考慮數(shù)據(jù)本地化;
    5.TaskTracker運行jar程序后,會每個一段時間向JobTracker發(fā)送一個心跳,同時告訴JobTracker任務完成情況;當JobTracker收到最后一個JobTracker發(fā)送來的作業(yè)完成時,它會將該作業(yè)設置為成功,同時展示給用戶;

Yarn執(zhí)行流程

Yarn執(zhí)行job流程如下圖:


Yarn執(zhí)行流程.png

其主要流程有以下幾個步驟組成:

  1. 作業(yè)提交

    • 第一步: 客戶端通過調(diào)用job.waitForCompletion()方法向整個集群提交MapReduces任務;
    • 第二步: 客戶端通過getNewApplication方法向ResouceManager申請新應用,成功的話,ResourceManager會返回一個ApplicationId;
    • 第三步:客戶端根據(jù)ApplicationId在HDFS上創(chuàng)建一個文件夾用于復制作業(yè)需要的資源文件,包括jar程序包,配置文件,以及輸入split;
    • 第四步:客戶端通過submitApplications方法向ResourceManager提交作業(yè);
  2. 作業(yè)初始化:

    • 第五步:ResourceManager在收到submitApplications請求后,會將該請求發(fā)送給scheduler(調(diào)度器),調(diào)度器會分配一個container,用來運行MRAppMaster應用程序,該應用管理器由所在的nodeManager負責監(jiān)控;
    • 第六步: MRAppMaster會對作業(yè)進行初始化,創(chuàng)建一些bookkeeping對象來監(jiān)控作業(yè)的進度,獲得任務進度和完成報告
    • 第七步:MRAppMaster會從HDFS上獲取輸入split,然后為每個split分配創(chuàng)建一個map任務;
  3. 資源分配

    • 第八步: MRAppMaster會根據(jù)Map和Reduce任務向ResorceManager申請container資源來運行這些任務;這些請求是通過心跳傳輸?shù)?,請求信息中包含Map和Reduce運行的數(shù)據(jù)塊位置信息(如host和rack),資源調(diào)度器收到請求后,會盡量將Map/Reduce任務分配到存儲數(shù)據(jù)塊的節(jié)點或者分配到存有輸入split節(jié)點的機架上的其他節(jié)點;
  4. 任務執(zhí)行

    • 第九步:MRAppMaster會在資源調(diào)度器分配container后,聯(lián)系對應的NodeManager啟動container,運行一個YarnChlid的java應用程序;
    • 第十步:YarnChild應用程序會從HDFS上獲取jar文件,作業(yè)配置以及相應的資源文件;
    • 第十一步: YarnChild通過.jar程序運行對應的Map或者Reduce任務;
  5. 任務執(zhí)行情況上報:Yarn將任務的執(zhí)行情況和狀態(tài)(包括container)上報給MRAppMaster,客戶端定時刷新任務狀態(tài);

  6. 作業(yè)完成:作業(yè)完成后,會將作業(yè)狀態(tài)進行清理包括MRAppMaster和Container,以及OutputCommiter上的作業(yè)清理方法也將會被調(diào)用,最后作業(yè)的歷史信息將會被存儲以備查詢;

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • MapReduce框架結構## MapReduce是一個用于大規(guī)模數(shù)據(jù)處理的分布式計算模型MapReduce模型主...
    Bloo_m閱讀 3,941評論 0 4
  • MapReduce作業(yè)運行流程 Map-Reduce的處理過程主要涉及下面四個部分: 客戶端Client:用于提交...
    tracy_668閱讀 846評論 0 5
  • 【什么是大數(shù)據(jù)、大數(shù)據(jù)技術】 大數(shù)據(jù),又稱巨量資料,指的是所涉及的數(shù)據(jù)資料量規(guī)模巨大到無法在合理時間內(nèi)通過傳統(tǒng)的應...
    kimibob閱讀 2,894評論 0 51
  • 目的這篇教程從用戶的角度出發(fā),全面地介紹了Hadoop Map/Reduce框架的各個方面。先決條件請先確認Had...
    SeanC52111閱讀 1,836評論 0 1
  • 我先前說的會游泳,所謂的會,其實就是終于能在泳池里游個完整的50m了,還不算太會,但至少是會了。 會游之后中間間斷...
    江河rl閱讀 252評論 0 0

友情鏈接更多精彩內(nèi)容