Hadoop - YARN 概述

一 概述

      Apache Hadoop YARN (Yet Another Resource Negotiator,還有一種資源協調者)是一種新的 Hadoop 資源管理器,它 是一個通用資源管理系統。可爲上層應用提供統一的資源管理和調度,它的引入爲集羣在利用率、資源統一管理和數據共享等方面帶來了巨大優勢。                      

   
                                           

         YARN最初是爲了修復MapReduce實現裏的明顯不足,並對可伸縮性(支持一萬個節點和二十萬個內核的集羣)、可靠性和集羣利用率進行了提高。YARN實現這些需求的方式是,把Job Tracker的兩個主要功能(資源管理和做業調度/監控)分紅了兩個獨立的服務程序——全局的資源管理(RM)和針對每個應用的應用 Master(AM)。這樣一個應用要麼是傳統意義上的MapReduce任務,要麼是任務的有向無環圖(DAG)。shell

           YARN從某種那個意義上來講應該算作是一個雲操做系統,它負責集羣的資源管理。在操做系統之上可以開發各種的應用程序,好比批處理MapReduce、流式做業Storm以及實時型服務Storm等。這些應用可以同一時候利用Hadoop集羣的計算能力和豐富的數據存儲模型, 共享同一個Hadoop 集羣和駐留在集羣上的數據。

此外,這些新的框架還可以利用YARN的資源管理器,提供新的應用管理器實現。網絡


二 YARN的組成

                                        
                                
                                              YARN的基本組成
 
YARN的核心思想 將JobTracker和TaskTacker進行分離,它由如下幾大構成組件: 
        a. 一個全局的資源管理器  ResourceManager
        b.  ResourceManager 的每個節點代理  NodeManager
        c. 表示每個應用的 ApplicationMaster
        d. 每一個 ApplicationMaster 擁有多個Container在 NodeManager 上執行

如下對它們作一個簡單的介紹:

  1. ResourceManager(RM)架構

         RM是一個全局的資源管理器,負責整個系統的資源管理和分配。它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(Applications Manager。ASM)。

     
      調度器   調度器依據容量、隊列等限制條件(如每個隊列分配必定的資源,最多運行必定數量的做業等),將系統中的資源分配給各個正在運行的應用程序。

需要注意的是。該調度器是一個「純調度器」,它再也不從事不論什麼與詳細應用程序相關的工做,比方不負責監控或者跟蹤應用的運行狀態等,也不負責又一次啓動因應用運行失敗或者硬件故障而產生的失敗任務,這些均交由應用程序相關的ApplicationMaster完畢。調度器僅依據各個應用程序的資源需求進行資源分配,而資源分配單位用一個抽象概念「資源容器」(Resource Container。簡稱Container)表示,Container是一個動態資源分配單位,它將內存、CPU、磁盤、網絡等資源封裝在一塊兒,從而限定每個任務使用的資源量。此外。該調度器是一個可插拔的組件,用戶可依據本身的需要設計新的調度器,YARN提供了多種直接可用的調度器,比方Fair Scheduler和Capacity Scheduler等。併發


       應用程序管理器   應用程序管理器負責管理整個系統中所有應用程序,包含應用程序提交、與調度器協商資源以啓動ApplicationMaster、監控ApplicationMaster執行狀態並在失敗時又一次啓動它等。

  2. ApplicationMaster(AM)app

          用戶提交的每個應用程序均包括一個AM,主要功能包括:
          與RM調度器協商以獲取資源(用Container表示);
           將獲得的任務進一步分配給內部的任務(資源的二次分配)。
          與NM通訊以啓動/中止任務
          監控所有任務執行狀態,並在任務執行失敗時又一次爲任務申請資源以從新啓動任務。
   
      當前YARN自帶了兩個AM實現,一個是用於演示AM編寫方法的實例程序distributedshell。它可以申請必定數目的Container以並行執行一個Shell命令或者Shell腳本;還有一個是執行MapReduce應用程序的AM—MRAppMaster。

       注:RM僅僅負責監控AM,在AM執行失敗時候啓動它,RM並不負責AM內部任務的容錯,這由AM來完畢。


  3. NodeManager(NM)
        NM是每個節點上的資源和任務管理器,一方面。它會定時地向RM彙報本節點 上的資源使用狀況和各個Container的執行狀態;還有一方面,它接收並處理來自AM的Container啓動/中止等各類請求。

    4. Container
           Container是YARN中的資源抽象。它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM爲AM返回的資源即是用Container表示。YARN會爲每個任務分配一個Container,且該任務僅僅能使用該Container中描寫敘述的資源。

     注:1. Container不一樣於MRv1中的slot,它是一個動態資源劃分單位。是依據應用程序的需求動態生成的。

            2.  現在YARN僅支持CPU和內存兩種資源,且使用了輕量級資源隔離機制Cgroups進行資源隔離。
      
             YARN的資源管理和執行框架都是按主/從範例實現的——Slave ---節點管理器(NM)執行、監控每個節點。並向集羣的Master---資源管理器(RM)報告資源的可用性狀態, 資源管理器 終於爲系統裏所有應用分配資源。

        特定應用的運行由 ApplicationMaster 控制。ApplicationMaster負責將一個應用切割成多個任務。並和資源管理器協調運行所需的資源,資源一旦分配好, ApplicationMaster 就和節點管理器一塊兒安排、運行、監控獨立的應用任務。

        需要說明的是。 YARN不一樣服務組件的通訊方式採用了 事件驅動的異步併發機制,這樣可以簡化系統的設計。


四 YARN 架構簡析
      
   集中式架構
        集中式調度器(Monolithic Schuduler)的特色是,資源的調度和應用程序的管理功能全部放到一個進程中完畢,開源界典型的表明是MRv1 JobTracker的實現。

這樣設計的缺點很是明顯,擴展性差:首先,集羣規模受限;其次。新的調度策略難以融入到現有代碼中,比方以前僅支持MapReduce做業,現在要支持流式做業,而將流式做業的調度策略嵌入到中央調度當中是一項很是難的工做。框架


   雙層調度架構
        爲了客服集中式調度器的不足,雙層調度器是一種很是easy被想到的解決之道。它可看做是一種分而治之的機制或者是策略下放機制:雙層調度器仍保留一個經簡化的集中式資源調度器,但詳細任務相關的調度策略則下方到各個應用程序調度器完畢。

這樣的調度器的典型表明是Mesos或YARN。異步

Mesos調度器由兩部分組成。各自是資源調度器和框架(應用程序)調度器,當中,資源調度器負責將集羣中的資源分配給各個(應用程序),而框架(應用程序)調度器負責將資源進一步分配給內部的各個任務。用戶很是easy將一種框架或者系統接入Mesos.工具

       
       雙層調度器的特色是:各個框架調度器並不知道整個集羣資源使用狀況,僅僅是被動地接受資源;資源調度器僅將可用的資源推送給各個框架,而由框架本身選擇是使用仍是拒絕這些資源;一旦框架接受到新資源,再進一步將資源分配給其內部的任務,進而實現雙層調度。然而這樣的調度器也是有缺點。主要表現在下面兩個方面:1.各個框架沒法知道整個集羣的實時資源使用狀況;採用悲觀鎖,併發粒度小。

           具體介紹可以參考這篇論文:


五 小結
          
        隨着YARN的不斷髮展和無缺,各類類型的應用程序。包含相似MapReduce的短做業、相似Web Service的長做業等。都可直接部署和執行在YARN上,當前YARN對外提供的接口均是底層接口,這給用戶編寫和調試應用程序帶來了很是大的麻煩,比方沒法彙集分散在各個節點上的應用程序日誌、應用程序生命週期難以管理、缺少第三方工具將一個現有的系統執行在YARN上等。僅僅有這些問題都獲得很是好的解決,YARN才幹夠走向成熟。
相關文章
相關標籤/搜索