Yarn的提交流程&&调度器
yarn的提交流程
- client向ResourceManager发送请求
- ResourceManager返回client一个ApplicationID
- client根据这个ApplicationID检查输入输出目录是否正确,job的输入分片是否正常,将job需要的资源复制到以ApplicationID命名的hdfs目录中
- client向ResourceManager发出请求
- ResourceManager将请求发送给Scheduler
- Scheduler分配一个Container,用于启动ApplicationMaster
- Container与指定的NodeManager建立通信,要求启动Container里的ApplicationMater
- ApplicationMaster初始化任务,并向RM申请需要的资源
- RM返回给ApplicationMater需要的NodeManager
- ApplicationMaster与对应的NodeManager进行通信,申请启动Container任务
- container中的应用程序会将需要的计算资源从HDFS下载到本地,再启动任务
- 运行过程中,任务会将状态和进度报告给ApplicationMaster,client会轮询ApplicationMaster获取状态
- 完成后注销Container,ApplicationMAaster向ResourceManager注销自己
yarn的调度器
- 队列调度:先进先出调度,首先给队头分配资源,然后给下一个job分配资源,缺点是小任务会被大任务阻塞。
- 容量调度:yarn的配置文件中默认的调度器,有一个专门的队列处理小任务,导致大任务的运行时间>队列调度器中大人物运行的时间
- 公平调度:为所有运行的job动态调整所需要的资源。当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。