1. 程式人生 > >MapReduce1與Yarn(MapReduce2)

MapReduce1與Yarn(MapReduce2)

    (1)在Hadoop1.x中,通過設定mapred.job.tracker來決定執行mapreduce機制,如果設定為local,則使用本地的作業執行器,如果設定為主機和埠號,則這個地址被解析為一個jobtracker地址,執行器則將作業提交給jobtracker。

    它主要由以下幾個元件組成:Client、JobTracker、TaskTracker、Task

    (2) 在hadoop2.x中,mapreduce執行在YARN上,通過mapreduce.framework,name屬性設定,local表示本地執行,classic表示經典mapreduce框架,yarn表示新的框架。

    MapReduce和YARN的關係

    Hadoop2.MapReduce(MRv2)與Hadoop1.MapReduce(MRv1)在程式設計介面、資料處理引擎(Map Task、ReduceTask)是完全一樣的,可以認為MRv2重用了MRv1的這些模組,不同的是資源管理和作業管理系統,MRv1中資源管理和作業管理均是由JobTracker實現的,集兩個功能於一身,而在MRv2中,將這兩部分分開了,其中,作業管理由ApplicationMaster實現,資源管理由新增系統YARN完成,YARN具有通用性,因此YARN也可以作為其他計算框架的資源管理系統,不僅限於MapReduce,也是其他計算框架,比如Spark、Strom等。

MapReduce1體系架構

它主要由以下幾個元件組成:Client、JobTraker、TaskTrack、Task


(1)Client

    使用者編寫的MapReduce程式通過Client提交到JobTracker端,同時,使用者可通過Client提供的一些介面檢視作業執行狀態。在Hadoop內部用“作業(Job)“表示MapReduce程式。一個MapReduce程式可對應若干個作業,而每個作業會被分解為若干個Map/Reduce任務(Task)。

(2)JobTracker

    JobTracker主要負責資源監控和作業排程

。JobTracker監控所有TaskTracker與作業Job的健康情況,一旦發現失敗情況後,其會將相應的任務轉移到其他節點;同時,JobTracker會跟蹤任務的執行進度、資源使用量等資訊,並將這些資訊告訴任務排程器,而排程器會在資源出現空閒時,選擇合適的任務使用這些資源。在Hadoop中,任務排程器是一個可插拔的模組,使用者可以根據自己的需要設計相應的排程器。

(3)TaskTracker

    TaskTracker會週期性地通過Heartbet將本節點上資源的使用情況和任務的執行進度彙報彙報給JobTracker,同時接受JobTracker傳送過來的命令並執行相應的操作(如啟動新任務、殺死任務等)。TaskTracker使用”slot“等量劃分本節點上的資源量。”slot“代表計算資源(CPU、記憶體等)。一個Task獲取到一個slot後才有機會執行,而Hadoop排程器的作用就是將各個TaskTracker的空閒slot分配給Task使用。skot分為Map slolt和Reduce slot,分別供給Map Task和Reduce Task使用。TaskTracker通過slot數目(可配置引數)限定Task的併發度。

(4)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執行過程如下圖所示。該階段分為三個階段:

    (1)從遠端節點上讀取Map Task中間結果(稱為“Shuffle階段”)

    (2)按照key/value對及進行排序(稱為“Sort”階段

    (3)依次讀取<key,value list>,呼叫使用者自定義得reduce()函式處理,並將最終結果存到HDFS上(稱為“Reduce階段”)


   YARN(MRv2)體系架構

1、YARN是什麼?

    YARN是資源管理系統,從MRv1演化而來,其核心是思想是:將MR1中JobTracker的資源管理和作業呼叫兩個功能分開,分別由ResourceManger和ApplicationMaaster程序來實現。

(1)ResourceManger:負責整個叢集的資源管理和排程

(2)ApplicationMaster:負責應用程式相關事務,比如任務排程、任務監控、容錯等,每一個應用程式對應一個ApplicationMaster

2、YARN架構

主要由ResourceManger、NodeManger、ApplicationMaster、Container等以下幾個元件構成


(1)ResourceManger(RM)

    YARN分層結構的本質是ResourceManger,負責整個系統的資源管理和分配,主要包括排程器Schedule和AM兩個核心元件。RM將各個資源部分(計算、記憶體、頻寬等)安排給基礎NM(YARN得每個節點代理)。RM還與AM一起分配資源,與NM一起啟動和監視他們的基礎應用程式。再此上下文中,AM承擔了以前的TaskTracker的一些角色,RM承擔了JobTracker的角色。

    排程器Schedule接收來自AM的應用程式資源請求,把叢集中的資源以Container的形式分配給申請的應用程式

    容器container作為動態資源分配單位,每個容器中都封裝了一定數量的CPU、記憶體、磁碟等資源,

    總的來說,RM有以下作用:

    1)處理客戶端請求

    2)啟動/監控AM

    3)監控NM

    4)資源的分配與排程

(2)ApplicationMaster(AM)

    RM接收使用者提交的作業,按照作業的上下文資訊以及從AM收集來的容器狀態資訊,啟動排程過程,為使用者作業啟動一個AM

    AM的主要功能是:

    1)當用戶作業提交時,AM與RM獲取資源,RM會以容器的形式為AM分配資源

    2)把獲取的資源進一步分配給各個任務(Map/Reduce)

    3)與NM保持互動通訊進行應用程式的啟動、執行、監控和停止,監控申請到的資源使用情況,對所有任務的執行進度和狀態進行監控,並在任務發生失敗時執行失敗恢復(即重新申請資源重啟任務)

    4)定時向RM傳送”心跳“訊息,報告資源的使用情況和應用的進度訊息

    5)當作業完成時,AM向RM登出容器,執行週期完成

    總的來說,AM有以下作用:

    1)位應用程式申請資源並分配給內部的任務

    2)任務的監控與容錯

(3)NodeManger(NM)

    NM管理YARN叢集中的每個節點。NM提供針對叢集中每個節點的服務,從監督對一個容器的終身管理到監視資源和跟蹤節點健康。容器代表著可供一個特定應用程式使用的針對每個節點的資源。

    總的來說,NM有以下作用:

    1)管理單個節點上的資源

    2)處理來自RM、AM的命令

需要說明的是:NM主要負責管理抽象的容器,只處理與容器相關的事情,而不具體負責每個任務自身狀態的管理,因為這些管理工作是由AM完成的,AM會通過不斷與NM通訊來掌握各個任務的執行狀態

(4)Container

    Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如記憶體、CPU、磁碟、網路等,當AM向RM申請資源時,RM為AM返回的資源便是用COntainer表示的。YARN會為每個任務分配一個Container,且該任務只能使用該Container中描述的資源。