YARN中自己總結的幾個關鍵點

以前在Hadoop 1.0中JobTracker主要完成兩項功能:資源的管理和作業控制。在集羣規模過大的場景下,JobTracker 
存在以下不足: 
1)JobTracker 單點故障。 
2)JobTracker 承受的訪問壓力大,影響系統的擴展性。 
3)不支持MapReduce之外的計算框架,比如Storm、Spa rk、Flink 

因此在YARN的設計中,資源的管理和作業控制是分離開的。取代JobTracker的是ResourceManager、ApplicationMaster兩個部分。 

  ● Resource Manager是一個全局的資源管理器 ,它做的事情是調度、啓動每一個Job所屬的ApplicationMaster、另外監控ApplicationMaster的存在情況。注:RM只負責監控AM,在AM運行失敗時候啓動它,RM並不負責AM內部任務的容錯,這由AM來完成。(是通過RM中的applicationManager來完成的) 
  ● ApplicationMaster是每一個Job(不是每一種)都有的一個部分,ApplicationMaster可以運行在ResourceManager以外的機器上,每個應用程序對應一個ApplicationMaster。。 
  ● NodeManager是ResourceManager的在每個節點的代理,負責 Container 狀態的維護,並向RM保持心跳。 
  ● 另外,YARN使用Container對資源進行抽象,它封裝了某個節點上一定量的資源(現在YARN僅支持CPU和內存兩種資源)。當AM向RM申請資源時,RM爲AM返回的資源使用Container表示。YARN會爲每個任務分配一個或多個Container,且該任務只能使用該Container中描述的資源。(注:AM也是運行在一個Container中),)目前可以支持多種計算框架運行在YARN上面,比如MapReduce、Storm、Spark、Flink。 

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

要使用一個 YARN 集羣,首先需要來自包含一個應用程序的客戶的請求。 

YARN設計的優點 
  ● 將資源管理和作業控制分離,減小JobTracker壓力 
      ○ YARN的設計大大減小了 JobTracker(也就是現在的 ResourceManager)的資源消耗,並且讓監測每一個 Job 子任務 (tasks) 狀態的程序分佈式化了,更安全、更優美。 
      ○ 老的框架中,JobTracker一個很大的負擔就是監控job下的tasks的運行狀況,現在,這個部分就扔給ApplicationMaster做了而ResourceManager中有一個模塊叫做ApplicationsManager(ASM),它負責監測ApplicationMaster的運行狀況。 
  ● 能夠支持不同的計算框架 

工作原理 

 

mapreduce on yarn 

 

ARN的不足與展望 
YARN是一個雙層調度器(Two-level scheduler),解決了中央調度器(Monolithic scheduler)的不足(中央調度器典型的代表就是JobTracker),雙層調度架構看上去爲調度增加了靈活性和併發性,但實際上它保守的資源可見性和上鎖算法(使用悲觀併發)也限制了靈活性和併發性。第一,保守的資源可見性導致各框架無法感知整個集羣的資源使用情況,有空閒資源無法通知排隊的進程,容易造成資源的浪費;第二,上鎖算法降低了併發性,調度器會將資源分配給一個架構,只有該架構返回資源後,調度器纔回將該部分資源分配給其他架構,在第一個分配過程中,資源相當於被鎖住,從而降低了併發性。總結來說,YARN同其他雙層架構的調度器(例如:Mesos)都有的不足爲: 
  ● 各個應用無法感知集羣整體資源的使用情況,只能等待上層調度推送信息。 
  ● 資源分配採用輪詢、ResourceOffer機制(mesos),在分配過程中使用悲觀鎖,併發粒度小。 
  ● 缺乏一種有效的競爭或優先搶佔的機制。 
爲了改善雙層調度系統的的不足,尤其是各個應用無法感知集羣整體資源的使用情況和悲觀加鎖控制導致的併發性不高這兩個不足,共享狀態調度器(Shared State Scheduler)被越來越多的人所重視,其中最具代表性的就是Google的Omega。共享狀態調度器在雙層調度器的基礎上做了改進: 
  ● 簡化了雙層調度器中的全局資源管理器,改爲由一個Cell State來記錄集羣內的資源使用情況,這些使用情況都是共享的數據,以此來達到與全局資源管理器相同的效果。
  ● 所有任務訪問共享數據時,採用樂觀併發控制方法。 
共享調度器也存在不足。例如,當某一資源被不同任務同時訪問時容易產生衝突,訪問的任務越多時,衝突次數就會越多,衝突次數越高調度器的性能下降越快,這將影響調度器的工作效率和工作性能。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章