怎么分析yarn的调度模式

40次阅读
没有评论

共计 5178 个字符,预计需要花费 13 分钟才能阅读完成。

这篇文章跟大家分析一下“怎么分析 yarn 的调度模式”。内容详细易懂,对“怎么分析 yarn 的调度模式”感兴趣的朋友可以跟着丸趣 TV 小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着丸趣 TV 小编一起深入学习“怎么分析 yarn 的调度模式”的知识吧。

Hadoop  YARN 同时支持内存和 CPU 两种资源的调度(默认只支持内存,如果想进一步调度 CPU,需要自己进行一些配置),丸趣 TV 小编将介绍 YARN 是如何对这些资源进行调度和隔离的。yarn 对于自己运行时作业的资源分配模式有 Capacity Scheduler 和 Fair Scheduler 两种。

在 YARN 中,资源管理由 ResourceManager 和 NodeManager 共同完成,其中,ResourceManager 中的调度器负责 资源的分配,而 NodeManager 则负责资源的供给和隔离。ResourceManager 将某个 NodeManager 上资源分配给任务(这就是所 谓的“资源调度”)后,NodeManager 需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证,这就是所谓的 资源隔离。

基于以上考虑,YARN 允许用户配置每个节点上可用的物理内存资源,注意,这里是“可用的”,因为一个节点上的内存会被若干个服务共享,比如一部分给 YARN,一部分给 HDFS,一部分给 HBase 等,YARN 配置的只是自己可以使用的,配置参数如下:

(1)yarn.nodemanager.resource.memory-mb

表示该节点上 YARN 可使用的物理内存总量,默认是 8192(MB),注意,如果你的节点内存资源不够 8GB,则需要调减小这个值,而 YARN 不会智能的探测节点的物理内存总量。

(2)yarn.nodemanager.vmem-pmem-ratio

任务每使用 1MB 物理内存,最多可使用虚拟内存量,默认是 2.1。

(3)yarn.nodemanager.pmem-check-enabled

是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是 true。

(4)yarn.nodemanager.vmem-check-enabled

是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是 true。

(5)yarn.scheduler.minimum-allocation-mb

单个任务可申请的最少物理内存量,默认是 1024(MB),如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数。

(6)yarn.scheduler.maximum-allocation-mb

单个任务可申请的最多物理内存量,默认是 8192(MB)。

默认情况下,YARN 采用了线程监控的方法判断任务是否超量使用内存,一旦发现超量,则直接将其杀死。由于 Cgroups 对内存的控制缺乏灵活性(即任务任何时刻不能超过内存上限,如果超过,则直接将其杀死或者报 OOM),而 Java 进程在创建瞬间内存将翻倍,之后骤降到正常值,这种情况下,采用 线程监控的方式更加灵活(当发现进程树内存瞬间翻倍超过设定值时,可认为是正常现象,不会将任务杀死),因此 YARN 未提供 Cgroups 内存隔离机制。

Capacity Scheduler

Capacity Scheduler 支持以下特性:

(1) 计算能力保证。支持多个队列,某个作业可被提交到某一个队列中。每个队列会配置一定比例的计算资源,且所有提交到队列中的作业共享该队列中的资源。

(2) 灵活性。空闲资源会被分配给那些未达到资源使用上限的队列,当某个未达到资源的队列需要资源时,一旦出现空闲资源资源,便会分配给他们。

(3) 支持优先级。队列支持作业优先级调度(默认是 FIFO)

(4) 多重租赁。综合考虑多种约束防止单个作业、用户或者队列独占队列或者集群中的资源。

(5) 基于资源的调度。支持资源密集型作业,允许作业使用的资源量高于默认值,进而可容纳不同资源需求的作业。不过,当前仅支持内存资源的调度。

想要配置能力调度模式首先我们需要将 yarn-site.xml 文件中设置 yarn.resourcemanager.scheduler.class 属性为 org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.CapacityScheduler

1.   资源分配相关参数

(1) capacity:队列的资源容量(百分比)。当系统非常繁忙时,应保证每个队列的容量得到满足,而如果每个队列应用程序较少,可将剩余资源共享给其他队列。注意,所有队列的容量之和应小于 100。

(2) maximum-capacity:队列的资源使用上限(百分比)。由于存在资源共享,因此一个队列使用的资源量可能超过其容量,而最多使用资源量可通过该参数限制。

m  minimum-user-limit-percent:每个用户最低资源保障(百分比)。任何时刻,一个队列中每个用户可使用的资源量均有一定的限制。当一个队列中同时运行多个用户的应用程序时中,每个用户的使用资源量在一个最小值和最大值之间浮动,其中,最小值取决于正在运行的应用程序数目,而最大值则由 minimum-user-limit-percent 决定。比如,假设 minimum-user-limit-percent 为 25。当两个用户向该队列提交应用程序时,每个用户可使用资源量不能超过 50%,如果三个用户提交应用程序,则每个用户可使用资源量不能超多 33%,如果四个或者更多用户提交应用程序,则每个用户可用资源量不能超过 25%。

(3) user-limit-factor:每个用户最多可使用的资源量(百分比)。比如,假设该值为 30,则任何时刻,每个用户使用的资源量不能超过该队列容量的 30%。

2.   限制应用程序数目相关参数

(1) maximum-applications:集群或者队列中同时处于等待和运行状态的应用程序数目上限,这是一个强限制,一旦集群中应用程序数目超过该上限,后续提交的应用程序将被拒绝,默认值为 10000。所有队列的数目上限可通过参数 yarn.scheduler.capacity.maximum-applications 设置(可看做默认 值),而单个队列可通过参数 yarn.scheduler.capacity. queue-path .maximum- applications 设置适合自己的值。

(2) maximum-am-resource-percent:集群中用于运行应用程序 ApplicationMaster 的资源比例上限,该参数通常用于限制处于活动状态的应用程序数目。该参数类型为浮点型,默认是 0.1,表示 10%。所 有队列的 ApplicationMaster 资源比例上限可通过参数 yarn.scheduler.capacity. maximum-am-resource-percent 设置(可看做默认值),而单个队列可通过参数 yarn.scheduler.capacity. queue-path . maximum-am-resource-percent 设置适合自己的值。

3.   队列访问和权限控制参数

(1) state:队列状态可以为 STOPPED 或者 RUNNING,如果一个队列处于 STOPPED 状态,用户不可以将应用程序提交到该队列或者它的子队列中,类似的,如果 ROOT 队列处于 STOPPED 状态,用户不可以向集群中提交应用程序,但正在运行的应用程序仍可以正常运行结束,以便队列可以优雅地退出。

(2) acl_submit_applications:限定哪些 Linux 用户 / 用户组可向给定队列中提交应用程序。需要注意的是,该属性具有继承性,即如果一个用户可以向某个队列中提交应用程序,则它可以向它的所有子队列中提交应用程序。配置该属性时,用户之间或用户组之间用“,”分割,用户和用户组之间用空格分割,比如“user1, user2 group1,group2”。

(3) acl_administer_queue:为队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等。同样,该属性具有继承性,如果一个用户可以向某个队列中提交应用程序,则它可以向它的所有子队列中提交应用程序。

Fair Scheduler

公平调度器按资源池(pool)来组织作业,并把资源公平的分到这些资源池里。默认情况下,每一个用户拥有一个独立的资源池,以使每个用户都能获得 一份等同的集群资源而不管他们提交了多少作业。按用户的 Unix 群组或作业配置(jobconf)属性来设置作业的资源池也是可以的。在每一个资源池内,会使用公平共享(fair sharing)的方法在运行作业之间共享容量(capacity)。用户也可以给予资源池相应的权重,以不按比例的方式共享集群。

除了提供公平共享方法外,公平调度器允许赋给资源池保证(guaranteed)最小共享资源,这个用在确保特定用户、群组或生产应用程序总能获取 到足够的资源时是很有用的。当一个资源池包含作业时,它至少能获取到它的最小共享资源,但是当资源池不完全需要它所拥有的保证共享资源时,额外的部分会在 其它资源池间进行切分。

要想配置公平调度模式首先我们需要将 yarn-site.xml 文件中设置 yarn.resourcemanager.scheduler.class 属性为 org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

Fair Scheduler 允许用户将队列信息专门放到一个配置文件(默认是 fair-scheduler.xml),对于每个队列,管理员可配置以下几个选项:

(1) minResources:最少资源保证量,设置格式为“X mb, Y vcores”,当一个队列的最少资源保证量未满足时,它将优先于其他同级队列获得资源,对于不同的调度策略(后面会详细介绍),最少资源保证量的含义不 同,对于 fair 策略,则只考虑内存资源,即如果一个队列使用的内存资源超过了它的最少资源量,则认为它已得到了满足;对于 drf 策略,则考虑主资源使用 的资源量,即如果一个队列的主资源量超过它的最少资源量,则认为它已得到了满足。

(2) maxResources:最多可以使用的资源量,fair scheduler 会保证每个队列使用的资源量不会超过该队列的最多可使用资源量。

(3) maxRunningApps:最多同时运行的应用程序数目。通过限制该数目,可防止超量 Map Task 同时运行时产生的中间输出结果撑爆磁盘。

(4) minSharePreemptionTimeout:最小共享量抢占时间。如果一个资源池在该时间内使用的资源量一直低于最小资源量,则开始抢占资源。

(5) schedulingMode/schedulingPolicy:队列采用的调度模式,可以是 fifo、fair 或者 drf。

(6) aclSubmitApps:可向队列中提交应用程序的 Linux 用户或用户组列表,默认情况下为“*”,表示任何用户均可以向该队列提交应用程序。需要注意的是,该属性具有继承性,即子队列的列表会继承父队列的列表。配置该属性时,用户之间或用户组之间用“,”分割,用户和用户组之间用空格分割,比如“user1, user2 group1,group2”。

(7) aclAdministerApps:该队列的管理员列表。一个队列的管理员可管理该队列中的资源和应用程序,比如可杀死任意应用程序。

管理员也可为单个用户添加 maxRunningJobs 属性限制其最多同时运行的应用程序数目。此外,管理员也可通过以下参数设置以上属性的默认值:

(1) userMaxJobsDefault:用户的 maxRunningJobs 属性的默认值。

(2) defaultMinSharePreemptionTimeout:队列的 minSharePreemptionTimeout 属性的默认值。

(3) defaultPoolSchedulingMode:队列的 schedulingMode 属性的默认值。

(4) fairSharePreemptionTimeout:公平共享量抢占时间。如果一个资源池在该时间内使用资源量一直低于公平共享量的一半,则开始抢占资源。

关于怎么分析 yarn 的调度模式就分享到这里啦,希望上述内容能够让大家有所提升。如果想要学习更多知识,请大家多多留意丸趣 TV 小编的更新。谢谢大家关注一下丸趣 TV 网站!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计5178字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)