1. YARN基本組成結構
RM=調度器+應用程序管理器ASM
調度器:純調度器,不做與具體應用程序相關的工作,可插拔,用戶可以設計新的調度器
ASM:負責整個系統中所有的應用程序,包括應用程序提交、與調度器協商資源以啓動AM,監控AM運行狀態並在失敗時重啓
AM:每一個應用程序都要有一個AM,功能:與RM調度器協商獲取資源(用container表示);將得到的任務進一步分配給內部的任務;與NM通信以啓動/停止任務;監控所有任務運行狀態,並在任務運行失敗時重新爲任務申請資源以重啓
NM:定時向RM彙報本節點上資源使用情況和container運行狀態;接收並處理來自AM的container啓動/停止要求
Container:資源抽象,封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等。動態資源劃分單位(與MR1中slot區別)
2. YARN通信協議
Client-RM: ApplicationClientProtocol
Admin-RM: ResourceManagerAdministrationProtocol
AM-RM: ApplicationMasterProtocol
AM-NM: ContainerManagementProtocol
NM-RM: ResourceTracker
3. YARN工作流程
用戶向yarn提交應用程序,包括AM程序、啓動AM命令、用戶程序
RM爲應用程序分配第一個container,並與對應的NM通信,要求它在這個container啓動應用程序的AM
AM首先向RM註冊,使用戶可以直接通過RM查看應用程序運行狀態,然後它爲各個任務申請資源,監控運行狀態,直到結束
AM採用輪詢的方式通過RPC協議向RM申請和領取資源
一旦AM申請到資源,與對應NM通信,要求它啓動任務
NM爲任務設置好運行環境(環境變量、jar、二進制程序etc),將任務啓動命令寫到一個腳本,通過運行腳本啓動任務
各個任務通過RPC協議向AM彙報自己狀態和進度,用戶可隨時通過RPC向AM查詢應用程序當前運行狀態信息
運行完成後,AM向RM註銷並關閉自己。
4. YARN分佈式緩存
Yarn分佈式緩存工作流程:
client將應用程序需要的文件資源(外部字典、jar、二進制文件)提交到hdfs;
client將應用程序提交到resourcemanager
RM與某個NM通信, NM收到命令後,從hdfs下載文件緩存,啓動AM
AM與RM通信,以請求和獲取計算資源
AM收到新分配的計算資源後,與對應的NM通信,以啓動任務
如果該應用程序第一次在該節點上啓動任務,則NM首先從hdfs下載文件緩存到本地,然後啓動任務
NM後續收到啓動任務請求後,如果文件已在本地緩存,則直接運行任務,否則等等文件緩存完再啓動