Hadoop -YARN ResourceManager 剖析

一律要

        YARN採用了Maser/Slave結構。當中Master實現爲ResourceManager,負責整個集羣的資源管理與調度; Slave實現爲NodeManager,負責單個節點的資源管理與任務啓動。

              

        ResourceManager是整個YARN集羣中最重要的組件之中的一個,它的設計直接決定了系統的可擴展性、可用性和容錯性等特色。它的功能較多,包含ApplicationMaster管理(啓動、中止等)、NodeManager管理、Application管理、狀態機管理等。

        在YARN中,ResourceManager負責集羣中所有資源的統一管理和分配,它接受來自各個節點(NodeManager)的資源彙報信息,並把這些信息依照必定的策略分配給各個應用程序(即ApplicationMaster)。

        注:ResourceManager主要完畢一下幾個功能:
                1.與client交互,處理來自client的請求。

                2.啓動和管理ApplicatinMaster,並在它執行失敗時又一次啓動它。
                3.管理NodeManager。接受來自NodeManager的資源管理彙報信息,並向NodeManager下達管理命令(比方殺死Contanier)等。
                4.資源管理與調度,接收來自ApplicationMaster的資源申請請求。併爲之分配資源(核心)。

二 ResourceManager 內部結構

                                                 
                                                                              ResourceManager 內部組件
2.1.用戶交互模塊
       RM分別針對普通用戶(ClientRMService)、管理員(AdminService)和Web提供了三種對外服務。普通用戶和管理員這兩類請求經過兩個不一樣的通訊通道發送給RM,是因爲要避免普通用戶請求過多致使管理員請求被堵塞而遲遲得不處處理。

2.2 NodeManager 管理模塊
      NodeManagerLivelinessMonitor
      監控NodeManager是否活着,假設一個NodeManager在必定時間內(10min)未回報心跳信息,則以爲它死掉了,需將其從集羣中移除。
      NodeListManager
       管理exclude和include節點列表。維護正常節點和異常節點列表。
       ResourceTrackerService
       處理來自NodeManager的請求,主要包括註冊和心跳兩種請求。註冊是NodeManager啓動時發生的行爲,請求包中包括節點的ID、可用資源的上限等信息;心跳是週期性的行爲。包括各個Container執行狀態,執行的Application列表、節點健康情況等信息,做爲請求的應答,ResourceTrackService可爲NM返回釋放Container列表、Application列表等信息。


 2.3 ApplicationMaster 管理模塊
       AMLivelinessMonitor
       監控ApplicationMaster是否還活着,假設一個ApplicationMaster在必定時間(10min)內未彙報心跳信息,則以爲它死掉了,它上面的所有正在執行的Container將被設置爲失敗狀態,而ApplicationMaster自己會被又一次分配到還有一個節點上(默認嘗試執行2次)。
       ApplicationMasterLaucher
       與某個NM 通訊,要求它爲某個應用程序啓動ApplicationMaster。

       ApplicationMasterService
       負責處理來自ApplictionMaster的請求,請求主要包含註冊、心跳和清理三種。

       註冊是AM 啓動時發生的行爲,註冊請求包中包括AM啓動節點,對外的RPCport號和tracking URL等信息。
       心跳是週期性的行爲,彙報信息包含所需資源的描寫敘述、待釋放的Container列表、黑名單列表,ApplicationMasterService則爲之返回新分配的Container、失敗的Container、待搶佔的Container列表等信息。

       清理是應用程序結束時發生的。ApplicationMaster向RM發送清理應用程序的請求,以回收資源和清理各類內存空間。

2.4 Applicatin 管理模塊
      ApplicationACLsManager
      負責管理應用程序的訪問權限。包括兩部分權限:查看權限和改動權限。查看權限主要用於查看應用程序基本信息,而改動權限則主要用於改動應用程序的優先級、殺死應用程序等。
      RMAppManager
      負責管理應用程序的啓動和關閉。ClientRMService收到來自client的提交應用程序的請求後,將調用函數RMAppManager#submitAppication建立一個RMApp對象,它將維護整個應用程序生命週期,從開始執行到終於結束。
      注:RM不負責ApplicationMaster內部任務的運行以及容錯。僅僅負責資源的分配和狀態的跟蹤。
      ContainerAllocationExpirer
      當一個ApplicationMaster得到一個Container後,YARN不一樣意ApplicationMaster長時間不正確其使用,這樣會減小整個集羣的利用率。當ApplicationMaster收到RM新分配的一個Container後,必須再必定的時間內(默以爲10min)內在相應的NM上啓動該Container,不然RM將強制回收該Container,而一個已經分配的Container是否被回收則是由ContinerAllocationExpier決定和運行的。


2.5 狀態機管理模塊
      負責維護應用程序的整個執行週期。包含維護同一個Application啓動的所有執行實例的生命週期(RMApp)、維護一次執行嘗試的整個生命週期(RMAppAttempt)、維護一個Contaner的執行週期(RMContainer)、維護一個NodeManager的生命週期(RMNode)。
 

     注:1. RMContainer維護了一個Container的執行週期。包含從建立到執行的整個過程。

RM將資源封裝成Container發送給應用程序的ApplicationMaster,而ApplicationMaster則會在Container描寫敘述的環境中啓動任務,所以。從這個層面上講,Container和任務的生命週期是一致的(眼下YARN不支持Container的重用,一個Container用完後會立馬釋放,未來可能會添加Container的重用機制)。node

             2. RMNode狀態機是ResourceManager中用於維護一個節點生命週期的數據結構。它的實際是RMNodeImple類。該類維護了一個節點狀態機,記錄了節點可能存在的各個狀態。好比。當一個應用程序運行完畢時候,會觸發一個CLEANUP_APP事件,以清理應用程序佔用的資源。當一個Container運行完畢時候,會觸發一個CLEANUP_CONTAINER事件,以清理Container佔用的資源。
             3.在YARN中,依據應用程序需求。資源被切分紅大小不一樣的資源塊,每份資源的基本信息由Container描寫敘述,而詳細的使用狀態追蹤則是由RMContainer完畢。RMContainer是ResoueceManager中用於維護一個Container生命週期的數據結構,它的實現是RMContianerImpl類,該類維護了一個Container狀態機,記錄了一個Container可能存在的各個狀態以及致使狀態轉換的事件,當某個事件發生的時候,RMContainerImpl會依據實際狀況進行Container狀態的轉移,同一時候觸發一個行爲。
            4. ApplicationMaster經過RPC函數ApplicationMasterProtocol#allocate拉取分配給它的Container後,將與相應的NodeManager通訊以啓動這些Container,接着NodeManager經過心跳機制將這些Container狀態彙報給ResourceManager,終於ResourceManager將這些Container狀態置爲RUNNING.
           5.當出現下面幾種狀況時,將致使Container置爲KILLED狀態。

               a.資源調度器爲了保持公平性或者更高優先級的應用程序的服務質量。不得不殺死一些應用佔用的Container以知足另一些應用程序的請求。
               b.某個NodeManager在必定時間內未向ResourceManager彙報心跳信息,則ResourceManager以爲它死掉了,會將它上面所在正在執行的Container狀態設置爲KILLED。
               c.用戶(使用API 或者 Shell命令)強制殺死一個RMAppAttempImpl實現時,會致使它所用的Container狀態設置爲KILLED。

2.6 安全管理模塊
        YARN自帶了很全面的權限管理機制,通常而言。系統安全機制由認證和受權兩大部分組成。認證就是簡單的對一個實體的身份進行推斷;受權則是向實體授予對數據資源和信息訪問權限的決策過程。
     Hadoop認證機制的實現同一時候採用了Kerberos和Token兩種技術,當中Kerberos用於用戶與服務與服務之間的認證,他是一種基於可信任的第三方服務的認證機制,在高併發狀況下,效率低。

2.7 資源分配模塊
       ResourceScheduler是資源調度器。它依照必定的約束條件(比方隊列容量限制等)將集羣中的資源分配給各個應用程序。當前主要考慮內存和CPU資源。ResourceScheduler是一個插拔式模塊。YARN自帶了一個批處理資源管理器-FIFO和兩個多用戶調度器--Fair Scheduler和Capacity Scheduler。


三 常見行爲分析

3.1 ApplicationMaster 超時
      AM向RM註冊後。必須週期性經過RPC函數ApplicationMasterProtocol#allocate向ResrouceManager彙報心跳以代表本身還活着。假設一段時間按(默認是10min)內未彙報心跳,則ResourceMananger宣佈它死亡,進而致使應用程序又一次執行或者直接退出。
3.2 NodeManager 超時
      NodeManger啓動後經過RPC函數ResourceTracker#registerNodeManager向RM註冊,以後將被增長到NMLivenessMonitor中進行監控。它必須週期性經過RPC函數ResourceTracker#nodeHeartBeat向RM彙報心跳以代表本身還活着,假設一段時間內(默認是10min)內爲彙報心跳。則RM宣佈它已經死亡,因此正在執行在它上面的Container將被回收。
安全


3.3 Container 超時
      在YARN中,存在兩種類型的Container,各自是用於執行ApplicationMaster的Container(AM Container)和執行普通任務的Container(簡稱爲 "普通Container")。

第一種Container超時將致使整個Application執行失敗,而另一種Container超時則會觸發一次資源回收。數據結構

而要注意的是。另一種Container超時致使任務執行失敗後。YARN不會主動將其調度到還有一個節點上執行,而是將狀態告訴應用程序的ApplicationMaster,由它決定是否又一次申請資源或者又一次執行。架構

      注:RM僅僅負責資源的分配和回收以及應用程序狀態的維護。它不會負責當任務失敗的時候進行從新啓動Container,即不負責容錯處理。

3.4 AM超時
       RMAppImpl收到超時事件後,假設未超過用戶設置的執行次數上限,將嘗試啓動一個新的RMAppAttemptImp或者直接宣佈該應用程序執行失敗;ResourceScheduler收到事件後。會清理該應用相關信息。


四 高可用

      Hadoop1.0中。HDFS和MapReduce均採用了Master/Slave結構,這樣的結構儘管具備設計很easy的有點,但同一時候也存在Master單點故障問題。由於存在單點故障問題的系統不適合在線應用場景,這使得Hadoop在至關長時間內僅用於離線存儲和計算。

         在Hadoop2.0中。HDFS相同面臨着單點故障問題,但由於每個MapReduce做業擁有本身的做業管理組件,所以再也不存在單點故障問題,新引入的資源管理系統YARN也採用了Master/Slave結構 。相同出現了單點故障問題。

        在 Master/Slave架構中,爲了解決Master的單點故障問題(也成爲高可用問題,即HA,High Availability),一般採用
熱備方案,即集羣中存在一個對外服務的Active Master和若干個處於就緒狀態的Standy Master,一旦Active Master出現故
障,立刻採用必定的側率選取某個Standy Master轉換爲Active Master以正常對外提供服務。


      HDFS 和 YARN均採用了基於共享存儲的HA 解決方式,即Active Master不斷將信息寫入一個共享存儲系統,而Standy Master則不斷讀取這些信息,以與Active Master的內存信息保持同步。當需要主備切換時。選中Standby Master需先保證信息全然同步後。再將本身的角色切換至Active Master。

      Zookeeper是一個針對大型文件分佈式系統的可靠協調系統。提供的功能包含統一命名服務、配置管理、集羣管理、共享鎖和隊列管理等。

需要注意的是Zookeeper設計目的並不是數據存儲,但它的確可以安全可靠地存儲少許數據以解決分佈式環境下多個服務之間的數據共享服務。併發


五 小結

     在YARN中。ResourceManager扮演管理者角色,它負責整個集羣的管理與調度。

ResourceManager內部有多個功能管理模塊。主要包含:ApplicatoinMaster管理(啓動和中止)、NodeManager管理、Application管理、狀態機管理等。app

相關文章
相關標籤/搜索