简介
Yarn是一个通用的资源管理和任务调度平台
执行流程
- 客户端请求ResourceManager,执行某个程序(可能是MR程序,可能是Spark程序, Flink程序)
- 因为RM只负责接收任务,具体的任务监控动作是由AppMaster来维护和管理的,所以RM会在某个NodeManager上创建AppMaster进程(代码级别),用于监控和管理该任务的执行
- AppMaster通过和RM的心跳机制,获取到该任务具体的信息
- AppMaster计算该任务执行所需的全部资源,然后向RM申请,RM会根据AppMaster的申请,返回其所需要的资源,可能是全部资源,也可能是所需要的部分资源,但至少也要返回执行MapTask任务所需要的资源,后续资源再不断逐步分配
- 因为RM管理的是整个Yarn集群的资源,而NM管理的是本机的资源,所以AppMaster需要和每一个贡献出(该任务所需)资源的NM节点进行连接(交互)
- NM管理本机的资源,创建出资源容器(Container容器),用于执行具体的计算任务
- (该计算任务的)所有Container容器,都会实时把自己的计算进度和结果反馈给AppMaster, 由AppMaster做统一管理和调度
- AppMaster把该任务的具体执行结果告知RM,至此,该计算任务执行完毕.紧接着AppMaster会启动自毁程序,告知RM关闭和释放该执行任务所有的Container容器,并结束和销毁AppMaster进程.
三大调度策略
- 先进先出调度器(FIFO)
每个job任务(可能是MR程序,Spark程序,Flink程序)独占整个集群所有的资源.如果有小任务在大任务后,小任务会迟迟无法执行 - 容量调度器(Capacity)
类似于多线程,可能会照成资源的浪费, 如果某个通道任务量较少,可以被其他通道借用资源,但是存在资源无法归还的情况 - 公平调度器(Fair)
共享集群所有的资源,但存在多个小任务与大任务同时执行时,大任务迟迟无法执行完成的情况