《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在應用程式結束後立即刪除