您的位置:首页 > 大数据

Java大数据学习11--资源调度平台Yarn的执行流程和三种调度器介绍

2019-06-03 14:59 591 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/stalin_/article/details/90752154

一、概述
Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而mapreduce等运算程序则相当于运行于操作系统之上的应用程序。

二、重要概念
1、yarn并不清楚用户提交的程序的运行机制
2、yarn只提供运算资源的调度(用户程序向yarn申请资源,yarn就负责分配资源)
3、yarn中的主管角色叫ResourceManager
4、yarn中具体提供运算资源的角色叫NodeManager
5、这样一来,yarn其实就与运行的用户程序完全解耦,就意味着yarn上可以运行各种类型的分布式运算程序(mapreduce只是其中的一种),比如mapreduce、storm程序,spark程序,tez ……
6、所以,spark、storm等运算框架都可以整合在yarn上运行,只要他们各自的框架中有符合yarn规范的资源请求机制即可
7、Yarn就成为一个通用的资源调度平台,从此,企业中以前存在的各种运算集群都可以整合在一个物理集群上,提高资源利用率,方便数据共享

三、执行流程
1、客户端向ResourceManager申请一个运行mr程序的job。
2、ResourceManager返回一个jobid以及提交资源用的路径stagingDir给客户端。
3、客户端将mr相关资源文件根据资源提交路径提交到HDFS完毕后通知ResourceManager。
4、ResourceManager初始化任务job,加到任务调度队列中。(目前有三种队列调度策略FIFO、Capacity Scheduler和Fair Scheduler)
5、NodeManager通过队列领取到job后,分配资源容器Container,启动MRAppmaster程序。
6、Container从HDFS上拷贝资源到本地。
7、MRAppmaster向ResourceManager申请运行MapTask资源。
8、ResourceManager将运行MapTask任务分配给另外两个NodeManager,另外两个NodeManager分别领取任务并创建容器。
9、MapReduce向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
10、MrAppMaster等待所有MapTask运行完毕,向ResourceManager申请容器,运行reduceTask。
11、ReducerTask想MapTask获取相应分区的数据。
12、程序运行完毕后,MapReduce会向ResourceManager申请注销自己。

四、Yarn的三种资源调度器:
1、FIFO Scheduler
FIFO Scheduler把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。
FIFO Scheduler是最简单也是最容易理解的调度器,也不需要任何配置,但它并不适用于共享集群。大的应用可能会占用所有集群资源,这就导致其它应用被阻塞。在共享集群中,更适合采用Capacity Scheduler或Fair Scheduler,这两个调度器都允许大任务和小任务在提交的同时获得一定的系统资源。
在FIFO调度器中,小任务会被大任务阻塞。
2、Capacity Scheduler
而对于Capacity调度器,有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。
3、Fair Scheduler
在Fair调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。

 

 

喜欢的朋友点点关注哦~~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: