1. 程式人生 > >《Hadoop Yarn權威指南》學習筆記(零)——Yarn核心概念

《Hadoop Yarn權威指南》學習筆記(零)——Yarn核心概念

本文是我讀《Hadoop Yarn權威指南》的筆記,文字部分是書上的內容摘錄,如有誤歡迎指出

yarn的架構圖如下

1 ResourceManager

為系統中所有應用分配資源。

有一個可插拔的排程器Scheduler,負責為執行中的各種應用分配資源,使用一個叫Container的抽象概念,其中包括多種資源維度,如CPU、記憶體、磁碟、網路

Scheduler中有三種排程器

  • FIFO排程器:簡單粗暴,先入先出
  • Capacity排程器:管理員使用總槽位或者處理器容量預設多個佇列,保證每個佇列的最小資源量。當不需要最小容量時,可以提供給飢餓佇列。每個佇列內使用層次化的FIFO排程多個應用程式。由ACL(訪問控制列表)控制使用者可以向哪些佇列提交作業
  • Fair排程器:資源公平分配給所有應用,使得所有應用在平均時間下得到相等的份額。每個應用都屬於某一個佇列。Container每次分配都選擇使用了最少資源佇列中使用最少資源的應用程式。Fair排程器支援層次化佇列,每個佇列可以擁有子佇列,資源以公平方式分配給子佇列

2 NodeManager

每臺機器的從屬程序,負責啟動應用的Container,監視資源使用情況並向ResourceManager報道

NodeManager管理叢集中獨立的計算節點,管理Container的生命週期並監控每個Container資源使用情況,跟蹤節點健康狀況,管理日誌和應用程式附屬服務

啟動時NodeManager向ResourceManager註冊,傳送心跳資訊並等待指令

3 ApplicationMaster

是YARN中的重要新概念。每個應用程式擁有一個ApplicationMaster,是框架相關的,與Scheduler協商合適的Container,跟蹤應用程式狀態,監控它們的進度,ApplicationMaster本身也以一個Container身份執行

ApplicationMaster會週期性向ResourceManager傳送心跳資訊以及更新它的資源需求,隨後會收到ResourceManager傳送的Container租約。由此更新Applicationmaster的執行計劃以適應資源的過剩和不足,Container可以在應用程式執行過程中動態分配和釋放

4 資源模型

應用通過ApplicationMaster可以請求到非常具體的資源,例如資源名稱、記憶體量、CPU等

每個資源模型的屬性都有最大值和最小值,ApplicationMaster可以請求最小值整數倍的資源Container

5 ResourceRequest和Container

YARN需要允許應用程式共享叢集資源,還需要感知叢集拓撲提高效率(儘可能減少資料移動)

ResourceManager的Scheduler儲存了所有應用程式的資源需求資訊,以做出更優資源排程決策

應用程式通過ApplicationMaster請求資源,Scheduler會分配一個Container響應資源需求,ResourceRequest具有如下形式

<資源名稱,優先順序,資源需求,Container數>

  • 資源名稱是資源期望所在的主機名、機架名等資訊
  • 優先順序是應用程式內部的優先順序
  • 資源需求是需要的資源量
  • Container數表示需要幾個Container

資源請求的過程如圖,第5步是ResourceManager向ApplicationMaster傳送資源的最大、最小容量資訊,ApplicationMaster再決定如何使用資源

Container本質上是一種資源分配形式,是ResourceManager分配資源的結果,為應用程式授予使用資源的權利

ApplicationMaster負責取走Container並移交給NodeManager

6 Container規範

ApplicationMaster必須向NodeManager提供更多資訊啟動Container,ResourceManager將分配NodeManager的控制權交給ApplicationMaster。ApplicationMaster獨立聯絡其指定的NodeManager並提供Container Launch Context,包括環境變數、遠端儲存依賴檔案、安全令牌以及啟動程序命令。

執行結束後,NodeManager會清理本地工作目錄,如果Container還沒有退出(包括ApplicationMaster),NodeManager可以接受ResourceManager的指令去殺死剩餘Container

7 管理應用程式的依賴檔案

當啟動一個Container,ApplicationMaster會指定這個Container需要的檔案,YARN框架完成這些檔案的本地化

以下是一些相關術語解釋:

  • Localization: 本地化,拷貝或下載遠端資源到本地
  • LocalResource: 執行Container需要的檔案和庫,例如啟動Container需要的庫檔案、Container啟動後需要的配置檔案 靜態字典檔案等,NodeManager啟動Container之前將這些資源本地化

7.1 LocalResource

對每種LocalResource,應用程式都可以指定:

  • URL: LocalResource遠端地址
  • Size: LocalResource的byte大小
  • Creation timestamp: 遠端檔案系統上LocalResource建立的時間戳
  • LocalResourceType: 本地化的資源型別,包括FILE,ARCHIVE和PATTERN
  • Patten: PATTERN型別中,提取條目樣式
  • LocalResourceVisibility: 指定NodeManager本地化資源可見性,包括PUBLIC(任何使用者的Container都可以訪問),PRIVATE(同一使用者的應用程式共享)和APPLICATION(同一個應用程式的Container共享),可見性由客戶端指定

7.2 LocalResource時間戳

NodeManager根據時間戳檢測LocalResource是否被修改過,為了避免不一致的問題,YARN會讓依賴被修改的遠端檔案的Container失敗

客戶端必須填寫ApplicationMaster所需要的資源時間戳,ApplicationMaster啟動Container時,會向NodeManager指定資源時間戳

7.3 LocalResource生命週期

根據可見度具有不同的生命週期。PUBLIC和PRIVATE的LocalResource在磁碟容量緊張時刪除,APPLICATION的LocalResource在應用程式結束後立即刪除