Hadoop 2.0 中的資源管理框架 - YARN(Yet Another Resource Negotiator)


1. Hadoop 2.0 中的資源管理

Hadoop 2.0指的是版本為Apache Hadoop 0.23.x、2.x或者CDH4系列的Hadoop,內核主要由HDFS、MapReduce和YARN三個系統組成,其中,YARN是一個資源管理系統,負責集群資源管理和調度,MapReduce則是運行在YARN上離線處理框架,它與Hadoop 1.0中的MapReduce在編程模型(新舊API)和數據處理引擎(MapTask和ReduceTask)兩個方面是相同的。

讓我們回歸到資源分配的本質,即根據任務資源需求為其分配系統中的各類資源。在實際系統中,資源本身是多維度的,包括CPU、內存、網絡I/O和磁盤I/O等,因此,如果想精確控制資源分配,不能再有slot的概念,最直接的方法是讓任務直接向調度器申請自己需要的資源(比如某個任務可申請1.5GB 內存和1個CPU),而調度器則按照任務實際需求為其精細地分配對應的資源量,不再簡單的將一個Slot分配給它,Hadoop 2.0正式采用了這種基於真實資源量的資源分配方案。

Hadoop 2.0(YARN)允許每個節點(NodeManager)配置可用的CPU和內存資源總量,而中央調度器則會根據這些資源總量分配給應用程序。節點(NodeManager)配置參數如下:

(1)yarn.nodemanager.resource.memory-mb

可分配的物理內存總量,默認是8*1024,即8GB。

(2)yarn.nodemanager.vmem-pmem-ratio

任務使用單位物理內存量對應最多可使用的虛擬內存量,默認值是2.1,表示每使用1MB的物理內存,最多可以使用2.1MB的虛擬內存總量。

(3)yarn.nodemanager.resource.cpu-vcore

可分配的虛擬CPU個數,默認是8。為了更細粒度的划分CPU資源和考慮到CPU性能異構性,YARN允許管理員根據實際需要和CPU性能將每個物理CPU划分成若干個虛擬CPU,而每管理員可為每個節點單獨配置可用的虛擬CPU個數,且用戶提交應用程序時,也可指定每個任務需要的虛擬CPU個數。比如node1節點上有8個CPU,node2上有16個CPU,且node1 CPU性能是node2的2倍,那么可為這兩個節點配置相同數目的虛擬CPU個數,比如均為32,由於用戶設置虛擬CPU個數必須是整數,每個任務至少使用node2 的半個CPU(不能更少了)。

此外,Hadoop 2.0還引入了基於cgroups的輕量級資源隔離方案,這大大降低了同節點上任務間的相互干擾,而Hadoop 1.0僅采用了基於JVM的資源隔離,粒度非常粗糙。

盡管Hadoop 2.中的資源管理方案看似比較完美,但仍存在以下幾個問題:

(1) 資源總量仍是靜態配置的,不可以動態修改。這個已在完善中,具體可參考:

https://issues.apache.org/jira/browse/YARN-291

(2)CPU是通過引入的“虛擬CPU”設置的,而虛擬CPU的概念是模糊的,有歧義的,而社區正在嘗試借鑒amazon EC2中的ECU概念對其進行規整化,具體參考:

https://issues.apache.org/jira/browse/YARN-1024

https://issues.apache.org/jira/browse/YARN-972

(3)無法支持以組為單位的資源申請,比如申請一組符合某種要求的資源,目前社區也在添加,具體參考:

https://issues.apache.org/jira/browse/YARN-624

(4)調度語義不完善,比如目前應用程序只能申請的同一個節點上相同優先級的資源種類必須唯一,比如來自節點node1上優先級為3的資源大小是<1 vcore 2048 mb>,則不能再有自他大小,否則將會被覆蓋掉。目前社區正在完善,具體參考:

https://issues.apache.org/jira/browse/YARN-314

因此,在資源管理方面,Hadoop 2.0比1.0先進的多,它摒棄了基於slot的資源管理方案,采用了基於真實資源的管理方案,這將在資源利用率、資源控制、資源隔離等方面有明顯改善,隨着Hadoop 2.0調度語義的豐富和完善,它必將發揮越來越大的作用。

2. Yarn 框架原理及運行機制

2.1 Yarn 框架

 

(1) ResourceManager:以下簡稱RM。YARN的中控模塊,負責統一規划資源的使用。它接收來自NM的匯報,建立AM,並將資源派送給AM。 
(2) NodeManager:以下簡稱MM。YARN中的資源結點模塊,負責啟動管理container。
(3) ApplicationMaster:以下簡稱AM。YARN中每個應用都會啟動一個AM,負責向RM申請資源,請求NM啟動container,並告訴container做什么事情。 
(4) Container:對任務運行環境的抽象。它描述一系列信息:任務運行資源(包括節點、內存、CPU)、任務啟動命令、任務運行環境 
 
Hadoop 2.0 中 重構根本的思想是將 MR JobTracker 兩個主要的功能分離成單獨的組件,這兩個功能是  資源管理 任務調度 / 監控 。新的 資源管理器 全局管理所有應用程序計算資源的分配,每一個應用的 ApplicationMaster 負責相應的調度和協調。一個應用程序無非是一個單獨的傳統的 MapReduce 任務或者是一個 DAG( 有向無環圖 ) 任務。ResourceManager 和每一台機器的節點管理服務器能夠管理用戶在那台機器上的進程並能對計算進行組織。
 
事實上,每一個應用的 ApplicationMaster 是一個詳細的框架庫,它結合從 ResourceManager 獲得的資源和 NodeManager 協同工作來運行和監控任務。
上圖中 ResourceManager 支持分層級的應用隊列,這些隊列享有集群一定比例的資源。從某種意義上講它就是一個純粹的調度器,它在執行過程中不對應用進行監控和狀態跟蹤。同樣,它也不能重啟因應用失敗或者硬件錯誤而運行失敗的任務。
 
ResourceManager 是基於應用程序對資源的需求進行調度的 ; 每一個應用程序需要不同類型的資源,因此就需要不同的容器。資源包括:內存,CPU,磁盤,網絡等等。可以看出,這同現 Mapreduce 固定類型的資源使用模型有顯著區別,它給集群的使用帶來負面的影響。資源管理器提供一個調度策略的插件,它負責將集群資源分配給多個隊列和應用程序。調度插件可以基於現有的能力調度和公平調度模型。
 
上圖中 NodeManager 是每一台機器框架的代理,是執行應用程序的容器,監控應用程序的資源使用情況 (CPU,內存,硬盤,網絡 ) 並且向調度器匯報。
每一個應用的 ApplicationMaster 的職責有:向調度器索要適當的資源容器,運行任務,跟蹤應用程序的狀態和監控它們的進程,處理任務的失敗原因。

2.2 Yarn 框架相對於老的 MapReduce 框架的優勢呢

     1. 這個設計大大減小了 JobTracker(也就是現在的 ResourceManager)的資源消耗,並且讓監測每一個 Job 子任務 (tasks) 狀態的程序分布式化了,更安全、更優美。
     2. 在新的 Yarn 中,ApplicationMaster 是一個可變更的部分,用戶可以對不同的編程模型寫自己的 AppMst,讓更多類型的編程模型能夠跑在 Hadoop 集群中,可以參考 hadoop Yarn 官方配置模板中的 mapred-site.xml 配置。
     3. 對於資源的表示以內存為單位 ( 在目前版本的 Yarn 中,沒有考慮 cpu 的占用 ),比之前以剩余 slot 數目更合理。
     4. 老的框架中,JobTracker 一個很大的負擔就是監控 job 下的 tasks 的運行狀況,現在,這個部分就扔給 ApplicationMaster 做了,而 ResourceManager 中有一個模塊叫做 ApplicationsMasters( 注意不是 ApplicationMaster),它是監測 ApplicationMaster 的運行狀況,如果出問題,會將其在其他機器上重啟。
     5. Container 是 Yarn 為了將來作資源隔離而提出的一個框架。這一點應該借鑒了 Mesos 的工作,目前是一個框架,僅僅提供 java 虛擬機內存的隔離 ,hadoop 團隊的設計思路應該后續能支持更多的資源調度和控制 , 既然資源表示成內存量,那就沒有了之前的 map slot/reduce slot 分開造成集群資源閑置的尷尬情況。

2.3 以 Yarn 為基礎的 Hadoop 2.0 生態系統

    新一代的 YARN 容器框架,是傳統的MR Hadoop容器框架的升級版本,之前的MR部署架構依賴於JobTracker和TaskTracker的交互模式,而新一代的YARN容器框架,則采用了ResourceManager和NodeManager的交互模式,更高層次的抽象和架構設計,是的YARN容器框架能夠支撐多種計算引擎運行,包括傳統的Hadoop MR和現在的比較新的SPARK。 Hadoop 2.0 中的資源管理框架,它是一個框架管理器,為各種框架進行資源分配和提供運行時環境。而 MRv2 則是運行在YARN之上的第一個計算框架,其他計算框架,比如Spark、Storm等,都正在往YARN上移植。
 
(1)離線計算框架:MapReduce 
(2)DAG計算框架:Tez 
(3)流式計算框架:Storm 
(4)內存計算框架:Spark 
(5)圖計算框架:Giraph,Graphlib
 
注:以上內容皆來自於互聯網。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM