yarn提交流程分析 - 图1

1.流程详解

1.首先client运行任务向resourcemanager申请Application
2.然后resourcemanager会要求client上传jar包和配置文件到 /tmp…../.staging/job_$application_id目录下
3.client 完成 配置文件,切片信息,jar包的上传工作
4.client向resourcemanager汇报资源上传完毕申请运行一个MRAppMaster
5.RM会将用户的请求封装成一个task,放入队列中
6.nodemanager(以下称NM)会想RM(resourcemanager)领取任务,领取到任务后NM会根据cpu+mem 规格配置创建一个的 Container 在里面创建MRAppMaster
7.MRAppMaster一运行会会根据配置申请MapTask容器(同样放到队列中然后NM根据mem+cpu 配置创建Container 在里面运行MapTask) 并且会下载hdfs上的/tmp.. 的内容发送到MapTask中,这时候MapTask运行MRAppMaster监控任务的执行
8.MapTask任务执行成功后形成临时文件后MRAppMaster会再次想RM申请Container 运行ReduceTask
9.ReducerTask运行后会去MapTask 里面copy文件,然后运行ReducerTask运行完毕后汇报给MRAppMaster
10.MRAppMaster会向RM汇报任务处理完毕申请销毁Container,这时候创建的Container全部销毁。队列资源得到释放

2.yarn资源调度器

目前,Hadoop作业调度器主要有三种:FIFO Scheduler、Capacity Scheduler和Fair Scheduler。Hadoop2.7.2默认的资源调度器是Capacity Scheduler。
1.FIFO(维护的是先进先出的队列):不能满足不用场景的要求比如清洗任务一直跑的话,hive就不能立即查询到结果。另外还不能根据不同的场景分配资源。比如有的任务是 I/O密集型的有的是cpu密集型的,这样的不能区分。
2.容量调度器(Capacity Scheduler):它是Yahoo! 开发的。以队列为单位划分资源。每个队列可设置上限资源和下线资源。设定上限资源主要避免资源的滥用,而当资源有剩余的时候可以将闲置资源回归到其他队列。总之有以下特点:

  • 总量保证:管理员可以根据不同的用户划归不同的队列而用户可以共享所用的资源
  • 灵活性:如果有剩余可以共享资源而使用完毕后还是归当前队列
  • 多重租赁:支持多个用户多个
  • 动态修改配置
  • 安全保证:每个队列有严格的权限验证

3.Fair Scheduler Fair Schedulere是Facebook开发的多用户与容量调度器相同的是它也会回归不同的队列。但是不同的是公平调度器会尽量让不同的任务获取相同的机会,但是还能让大的任务因为没有资源而等待。