• 第十八章 Yarn资源调度器


    一、YARN概述

    思考:
    1)如何管理集群资源?
    2)如何给任务合理分配资源?
     
    Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。
    

    二、YARN基础架构

    YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成。
    

    三、YARN工作机制

    #1.MR程序提交到客户端所在的节点。
    #2.YarnRunner向ResourceManager申请一个Application。
    #3.RM将该应用程序的资源路径返回给YarnRunner。
    #4.该程序将运行所需资源提交到HDFS上。
    #5.程序资源提交完毕后,申请运行mrAppMaster。
    #6.RM将用户的请求初始化成一个Task。
    #7.其中一个NodeManager领取到Task任务。
    #8.该NodeManager创建容器Container,并产生MRAppmaster。
    #9.Container从HDFS上拷贝资源到本地。
    #10.MRAppmaster向RM 申请运行MapTask资源。
    #11.RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
    #12.MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
    #13.MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
    #14.ReduceTask向MapTask获取相应分区的数据。
    #15.程序运行完毕后,MR会向RM申请注销自己。
    

    四、作业提交全过程

    #作业提交全过程详解:
    1)作业提交
    第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。
    第2步:Client向RM申请一个作业id。
    第3步:RM给Client返回该job资源的提交路径和作业id。
    第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。
    第5步:Client提交完资源后,向RM申请运行MrAppMaster。
    
    2)作业初始化
    第6步:当RM收到Client的请求后,将该job添加到容量调度器中。
    第7步:某一个空闲的NM领取到该Job。
    第8步:该NM创建Container,并产生MRAppmaster。
    第9步:下载Client提交的资源到本地。
    
    3)任务分配
    第10步:MrAppMaster向RM申请运行多个MapTask任务资源。
    第11步:RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
    
    4)任务运行
    第12步:MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
    第13步:MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
    第14步:ReduceTask向MapTask获取相应分区的数据。
    第15步:程序运行完毕后,MR会向RM申请注销自己。
    
    5)进度和状态更新
    YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。
    
    6)作业完成
    除了向应用管理器请求作业进度外, 客户端每5秒都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。
    

    五、YARN调度器和调度算法

    目前,Hadoop作业调度器主要有三种:FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)。Apache Hadoop3.3.1默认的资源调度器是Capacity Scheduler。
    CDH框架默认调度器是Fair Scheduler。
    具体设置详见:yarn-default.xml文件
    <property>
        <description>The class to use as the resource scheduler.</description>
        <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
    </property>
    

    1.先进先出调度器(FIFO)

    FIFO调度器(First In First Out):单队列,根据提交作业的先后顺序,先来先服务。
    
    优点:简单易懂;
    缺点:不支持多队列,生产环境很少使用;
    

    2.容量调度器(Capacity Scheduler)

    Capacity Scheduler是Yahoo开发的多用户调度器
    

    #1.容量调度器特点:
    1)多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略。
    
    2)容量保证:管理员可为每个队列设置资源最低保证和资源使用上限
    
    3)灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。
    
    4)多租户:
    支持多用户共享集群和多应用程序同时运行。
    为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。
    
    #2.容量调度器资源分配算法
    

    3.公平调度器(Fair Scheduler)

    Fair Schedulere是Facebook开发的多用户调度器。
    

    #1.公平调度器特点:
    1)与容量调度器相同点
    (a)多队列:支持多队列多作业
    (b)容量保证:管理员可为每个队列设置资源最低保证和资源使用上线
    (c)灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。
    (d) 多租户: 支持多用户共享集群和多 应用程序同时运行;为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。
    
    2)与容量调度器不同点
    (1)核心调度策略不同
    (2)每个队列可以单独设置资源分配方式
    容量调度器:优先选择资源利用率低的队列
    容量调度器: FIFO、DRF
    公平调度器:优先选择对资源的缺额比例大的
    公平调度器: FIFO、FAIR、DRF
    
    #2.公平调度器----缺额
    

    #3.公平调度器队列资源分配方式
    

    #4.公平调度器资源分配算法
    

    #5.公平调度器队列资源分配方式
    (a)不加权(关注点是Job的个数) :
    需求:有一条队列总资源12个,有4个job, 对资源的
    需求分别是:
    job1->1,job2->2,job3->6, job4->5 
    第一次算: 12/4=3
    job1:分3 -->多2个
    job2: 分3 -->多1个
    job3:分3 -->差3个
    job4:分3 -->差2个
    
    第二次算:3/2=1.5
    job1:分1
    job2:分2
    job3:分3 -->差3个-->分1.5 -->最终: 4.5
    job4:分3 -->差2个-->分1.5 -->最终: 4.5
    
    第n次算:一直算到没 有空闲资源
    
    (b)加权(关注点是Job的权重) :
    需求:有一条队列总资源16,有4个job
    对资源的需求分别是:
    job1->4,job2->2 job3->10 job4->4 
    每个job的权重为:
    job1->5 job2->8 job3->1 job4->2
    第一次算: 16 / (5+8+1+2) = 1
    job1:分5 --> 多1
    job2:分8 -->多6
    job3:分1 --> 少9
    job4:分2 -->少2
    
    第二次算:7 /(1+2) = 7/3
    job1:分4
    job2:分2
    job3:分1 -->分7/3 (2.33) -->少6.67
    job4:分2 --> 分14/3(4.66) -->多2. 66
    
    
    第三次算:2.66/1=2.66
    job1:分4
    job2:分2
    job3:分1 -->分2.66/1 -->分2. 66
    job4:分4
    
    第n次算:一直算到没有 空闲资源
    
    (c) DRF策略
    DRF (Dominant Resource Fairness),我们之前说的资源,都是单一标准,例如只考虑内存(也是Yarn默认的情况)。但是很多时候我们资源有很多种,例如内存,CPU, 网络带宽等,这样我们很难衡量两个应用应该分配的资源比例。
    
    那么在YARN中,我们用DRF来决定如何调度:
    
    假设集群一共有100 CPU和10T内存,而应用A需要(2 CPU, 300GB),应用B需要(6 CPU,100GB)。则两个应用分别需要A (2%CPU, 3%内存)和B (6%CPU, 1%内存)的资源,这就意味着A是内存主导的, B是CPU主导的,针对这种情况,我们可以选择DRF策略对不同应用进行不同资源(CPU和内存)的一个不同比例的限制。
    

    六、YARN常用命令

    Yarn状态的查询,除了可以在hadoop103:8088页面查看外,还可以通过命令操作。常见的命令操作如下所示:
    需求:执行WordCount案例,并用Yarn命令查看任务运行情况。
    [delopy@hadoop102 ~]$ myhadoop.sh start
    
    [delopy@hadoop102 ~]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output
    

    1.yarn application查看任务

    #1.列出所有Application:
    [delopy@hadoop102 ~]$ yarn application -list
    2021-09-08 10:00:45,076 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at hadoop103/10.0.0.103:8032
    Total number of applications (application-types: [], states: [SUBMITTED, ACCEPTED, RUNNING] and tags: []):0
                    Application-Id	    Application-Name	    Application-Type	      User	     Queue	             State	       Final-State	       Progress	                       Tracking-URL
    
    
    #2.根据Application状态过滤:yarn application -list -appStates (所有状态:ALL、NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED)
    [delopy@hadoop102 ~]$ yarn application -list -appStates FINISHED
    2021-09-08 10:01:41,007 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at hadoop103/10.0.0.103:8032
    Total number of applications (application-types: [], states: [FINISHED] and tags: []):1
                    Application-Id	    Application-Name	    Application-Type	      User	     Queue	             State	       Final-State	       Progress	                       Tracking-URL
    application_1612577921195_0001	          word count	           MAPREDUCE	   delopy	   default	          FINISHED	         SUCCEEDED	           100%	http://hadoop102:19888/jobhistory/job/job_1612577921195_0001
    
    #3.Kill掉Application:
    [delopy@hadoop102 ~]$ yarn application -kill application_1612577921195_0001
    2021-09-08 10:02:43,007 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Application application_1612577921195_0001 has already finished
    

    2.yarn logs查看日志

    #1.查询Application日志:yarn logs -applicationId <ApplicationId>
    [delopy@hadoop102 ~]$  yarn logs -applicationId application_1612577921195_0001
    
    #2.查询Container日志:yarn logs -applicationId <ApplicationId> -containerId <ContainerId> 
    [delopy@hadoop102 ~]$  yarn logs -applicationId application_1612577921195_0001 -containerId container_1612577921195_0001_01_000001
    

    3.yarn applicationattempt查看尝试运行的任务

    #1.列出所有Application尝试的列表:yarn applicationattempt -list <ApplicationId>
    [delopy@hadoop102 ~]$ yarn applicationattempt -list application_1612577921195_0001
    2021-09-08 10:05:43,195 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Total number of application attempts :1
             ApplicationAttempt-Id	               State	                    AM-Container-Id	                       Tracking-URL
    appattempt_1612577921195_0001_000001	            FINISHED	container_1612577921195_0001_01_000001	http://hadoop103:8088/proxy/application_1612577921195_0001/
    
    #2.打印ApplicationAttemp状态:yarn applicationattempt -status <ApplicationAttemptId>
    [delopy@hadoop102 ~]$ yarn applicationattempt -status appattempt_1612577921195_0001_000001
    2021-09-08 10:08:43,896 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Application Attempt Report : 
    	ApplicationAttempt-Id : appattempt_1612577921195_0001_000001
    	State : FINISHED
    	AMContainer : container_1612577921195_0001_01_000001
    	Tracking-URL : http://hadoop103:8088/proxy/application_1612577921195_0001/
    	RPC Port : 34756
    	AM Host : hadoop104
    	Diagnostics :
    

    4.yarn container查看容器

    #1.列出所有Container:yarn container -list <ApplicationAttemptId>
    [delopy@hadoop102 ~]$ yarn container -list appattempt_1612577921195_0001_000001
    2021-09-08 10:09:43,396 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Total number of containers :0
                      Container-Id	          Start Time	         Finish Time	               State	                Host	   Node Http Address	
    #2.打印Container状态:yarn container -status <ContainerId>
    [delopy@hadoop102 ~]$ yarn container -status container_1612577921195_0001_01_000001
    2021-09-08 10:10:23,554 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Container with id 'container_1612577921195_0001_01_000001' doesn't exist in RM or Timeline Server.
        
     ps:只有在任务跑的途中才能看到container的状态
    

    5.yarn node查看节点状态

    #1.列出所有节点:yarn node -list -all
    [delopy@hadoop102 ~]$ yarn node -list -all
    2021-09-08 10:10:42,306 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at hadoop103/10.0.0.103:8032
    Total Nodes:3
             Node-Id	     Node-State	Node-Http-Address	Number-of-Running-Containers
     hadoop104:24699	        RUNNING	   hadoop104:8042	                           0
     hadoop103:30917	        RUNNING	   hadoop103:8042	                           0
     hadoop102:15035	        RUNNING	   hadoop102:8042	                           0
    

    6.yarn rmadmin更新配置

    #1.加载队列配置:yarn rmadmin -refreshQueues
    [delopy@hadoop102 ~]$ yarn rmadmin -refreshQueues
    2021-09-08 10:11:53,530 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at hadoop103/10.0.0.103:8033
    

    7.yarn queue查看队列

    #1.打印队列信息:yarn queue -status <QueueName>
    [delopy@hadoop102 ~]$ yarn queue -status default
    2021-09-08 10:21:59,018 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at hadoop103/10.0.0.103:8032
    Queue Information : 
    Queue Name : default
    	State : RUNNING
    	Capacity : 100.00%
    	Current Capacity : .00%
    	Maximum Capacity : 100.00%
    	Default Node Label expression : <DEFAULT_PARTITION>
    	Accessible Node Labels : *
    	Preemption : disabled
    	Intra-queue Preemption : disabled
    
  • 相关阅读:
    nas存储服务器硬盘出现故障离线导致磁盘阵列失效、服务器无法访问的数据恢复案例
    【北亚vSAN数据恢复案例】异常断电导致vSAN底层数据损坏的数据恢复
    【Vsan数据恢复】供电不稳服务器非正常关机导致vsan架构中虚拟机磁盘文件丢失的数据恢复
    随机数
    字符串和数组截取.....某人可以看看这个,希望能帮到你,
    利用angular与后台的交互
    AngularJS 深入理解 $scope
    angular 后台交换实例
    alert()、confirm()和prompt()的区别与用法
    ReactJs入门教程
  • 原文地址:https://www.cnblogs.com/jhno1/p/15241938.html
Copyright © 2020-2023  润新知