yarn架構學習
阿新 • • 發佈:2017-09-03
dfs exp 集群 rop 默認 工作流程 tasks version link
yarn的資源管理架構
RM節點
資源調度算法
參數<property>yarn.resourcemanager.scheduler.class</property>
- capacity scheduler,默認值<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>,可不配置
- fair scheduler,參數設置為org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler,並將<property>yarn.scheduler.fair.max.assign<property>設置為1,允許單獨定義fair-scheduler.xml文件
- FIFO,
Services
communication
yarn的交互模塊分三部分
- ClientRMService,用戶交互模塊,處理用戶提出的 commit app申請,kill app申請,獲取app的status
- AdminService,管理員交互模塊,yarn為管理員單獨提供一個通道,防止因user訪問過多造成管理員命令被餓死。
refreshQueues,刷新ResourceSchedule,
refreshNodes,刷新節點列表,exclude(可接入RM)/include(不可接入RM)
refreshSuperUserGroupGonfiguration,刷新用戶組配置
refreshUsertoGroupMapping,刷新用戶組的對應關系
refreshAdminAcls,通過yarn.admin.acls接口
refreshServiceAcls,更新服務訪問控制列表,ClientRmService/AppMasterService/ResourceTrackerService
- WebApp,提供web ui頁面
NMService
RMService
AppMasterService
管理方法與狀態機
- RM節點的AMLiveLinessMonitor服務,定期巡檢所有的AppMaster節點
- AM節點向RM節點發送心跳,由AppMasterService處理;RM超過yarn.am.liveness-monitor.expiry-interval-ms設置的心跳時間未收到AM的心跳反饋,則認為AM失敗
- 由RM的AppMasterLaucher,將該AM的所有container節點置為failed
- 由RM的AppMasterLaucher,向另一個NM節點提出發出創建ContainerManager的client的請求,內容包括命令,Jar包、環境變量等,打包發送,請求次數由yarn.resourcemanager.am.max-retries參數控制,然後再發起鏈接請求,協議為AMRMProtocol;
- NM受理並創建新的AM,與原AM工作一致
- 新的AM向RM進行註冊,由RM節點的AppMasterService服務受理
- 新AM能獲取到所有相關container的工作,覺得重要,則向RM提出新建container的申請,申請資源,由RM節點的AppMasterService服務受理
- 收到請求後,RM節點的AppMasterLauncher服務確認可用資源,並發起LaunchContainer的任務給NM,AppMaster所在的NM優先
- NM創建新的container,並向RM進行註冊,包含節點ID,可用的資源上限等信息,由RM的AppMasterService受理;
- 當處理完成後,由AM向RM發送finishApplicationMaster請求,由RM的AppMasterService受理;
- AppMasterLaucher通過RPC方式向NM發送Cleanup方法,並釋放所有container。
TaskScheduler
security
RM故障切換
RM的數據存儲在內存中,或者zookeeper中,這套集群存儲在zookeeper中,由配置參數
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>zw- 15 - 154 : 2181 ,zw- 15 - 165 : 2181 ,zw- 15 - 162 : 2181 </value>
</property>
|
控制,切換流程如下:
NM節點
功能模塊
工作流程
- 1.客戶端向hdfs提交jar包,二進制文件等
- 2.客戶端向RM提交app程序
- 3.RM向NM發出申請,請求啟動AppMaster,
- 4.NM收到請求,從hdfs獲取所需要的文件,
- 5.NM收到文件,啟動AM服務
- 6.AM服務與RM進行通訊,請求資源
- 7.RM分配所需要的資源,返回給AM
- 8.AM向NM發送命令StartContainerRequest
- 8.NM檢查是否第一次啟動container,如果是,則從hdfs下載所需文件,否則直接啟動應用。
Container生命周期
AppMaster服務
ApplicationMaster也是一個Container,是application的第一個container,承擔
資源隔離
yarn架構學習