【YARN-CapacityScheduler】
此文档描述CapacityScheduler,一个hadoop支持的可插拔的scheduler,它允许“multiple-tenants”(多租户)安全的共享集群资源,所以它们的applications在容量限制之下,可以及时的分配资源。
一、Overview
CapacityScheduler被设计成以“shared”、“multi-tenant”集群,使用操作友好的方式运行hadoop 应用;同时最大化吞吐能力和集群利用率。
传统的,每个organization都有自己私有的一套计算资源,它有足够的容量在峰值情况下满足此organization的SLA(Service-Level Agreement,服务等级协议)。每个organization一个独立的集群,那么在多个独立集群中它通常会导致较差的平均利用率和开销。运行一个较大的hadoop集群,在organizations之间共享集群是一个cost-effective(划算的)的方式,因为它允许organizations从经济规划中获取收益,而无需每个都创建私有的clusters。可是,organizations会关注这个共享集群,因为他们担心其他资源使用者会影响自己的SLA。
CapacityScheduler在给每个organization容量担保的同时,允许共享这个大集群。核心思想是hadoop集群中可用的resources在多个organizations之间共享,根据它们的计算需求获取资源。还有一个额外的好处,organization可以使用那些别人不用的过剩的容量(资源)。这以很划算的方式向organizations提供了弹性。
在organizations之间共享集群必须很好的支持了multi-tenancy,因此每个organization在capacity和safe-guards都需要被保证,以确保共享集群不会因为一个application、一个用户或者用户组等而受到影响。CapacityScheduler提供了严格的限制以确保单个application或者用户不能过度的消耗集群资源。此外,它还限制单个用户和queue初始化、pending应用的个数,以保证公平性和集群的稳定性。
CapacityScheduler提供的核心理念就是Queues,这些queues通常有管理员设定。为了在共享资源上,提供更多的控制和预见性,CapacityScheduler支持多级queue,以确保在其他queues允许使用空闲资源之前,资源可以在一个组织的sub-queues之间共享。
[官方文档,生涩难懂]
二、Features
1、Hierarchical Queues:队列层级结构的支持可以确保资源在一个organization的sub-queues之间共享,对于资源,如果sub-queue需要,那么可以被sub-queues共享使用,而不是释放交给其他queue。
2、Capacity Guarantees:某种意义上,网格中的一部分capacity将会分配给queue。所有提交到此queue的应用都可以访问分配给queue的capacity。管理员可以为每个queue配置容量的soft-limit和hard-limit。
3、Security:每个queue都有严格的ACL,用来控制哪些用户可以向某个queue提交applications。此外,还提供了安全防护(safe-guards),确保用户不能查看或者修改其他用户的applications。此外,per-queue和系统管理员角色是支持的。
4、Elasticity:空闲资源可以分配给任何一个queue,甚至超过它们的capacity。在未来的某个时间点上,当运行在低于Capacity的Queues需要这些资源时,当这些资源上运行的task完成后,它们将会被分配给那些运行在低于Capacity的queues。那么这可以保证资源的有效性是可预见的,而且对Queues而言也是弹性的,这样(弹性和预见性)可以避免人为的资源孔洞以提高资源利用率。
5、Multi-tenancy:提供了很多限制来避免一个application、user和queue(sub-queue)独占(垄断)了一个queue或者整个集群的资源,这些限制用来保障整个集群不会被压垮。
6、Operability:
A) Runtime Configuration:queue的定义和属性,比如Capacity、ACLs,管理员可使用安全的方式可以在运行时改变,以最小化中断用户的应用。此外,还向用户和管理员提供了一个console,来观察当前资源在各个Queue上的分配情况。管理员可以在运行时添加新的Queue,但是Queue不能在运行时删除。
B) Drain applications:管理员可以在运行时停止Queue,其上现有的applications会运行直到完成,不过将不能向此Queue提交新的application。如果一个queue处于“STOPPED”状态,新的application将不能提交到此Queue以及它的sub-queue中。不过Queue上已经存在的application会继续运行,即这个queue可以有好的“drained”。管理员可以重启一个处于“STOPPED”状态的queue。
7、Resource-based Scheduling:支持资源密集型的应用,可以为某个application指定比默认值更高的资源需求,可以容纳多个资源需求不同的applications。当前,资源需求只支持内存类型。
三、配置
1、设定ResourceManager使用CapacityScheduler
我们需要修改yarn-site.xml中的配置项,指定Scheduler:
<property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> </property>
hadoop 2.2+之后,默认Scheduler就是CapacityScheduler。
2、设定Queues
CapacityScheduler将会使用capacity-scheduler.xml作为queue配置文件。CapacityScheduler已经预定义了一个queue:root。系统中所有的queue都是root queue的子节点。其他的queues列表可以通过“yarn.scheduler.capacity.root.queues”中指定,每个queue名称以“,”分割。CapacityScheduler使用了一个称为“queue path”的概念来表示“多级queue”,“queue path”是一个queue层级的全路径,且以“root”开头,路径中以“.”作为分割符。
一个指定queue的子节点可以通过“yarn.scheduler.capacity.<queue-path>.queues”风格来定义。子节点不从父节点上直接继承properties,除非另有说明。例如,root queue有a,b,c三个子节点,以及a和b也有自己的sub-queue。
<property> <name>yarn.scheduler.capacity.root.queues</name> <value>a,b,c</value> <description>The queues at the this level (root is the root queue). </description> </property> <property> <name>yarn.scheduler.capacity.root.a.queues</name> <value>a1,a2</value> <description>The queues at the this level (root is the root queue). </description> </property> <property> <name>yarn.scheduler.capacity.root.b.queues</name> <value>b1,b2,b3</value> <description>The queues at the this level (root is the root queue). </description> </property>
3、Queue properties[capacity-scheduler.xml]
A) Resource Allocation:资源分配
- yarn.scheduler.capacity.<queue-path>.capacity:Queue的容量百分比,float类型,例如12.5。所有Queue的各个层级的capacity总和必须为100。因为弹性资源分配,如果集群中有较多的空闲资源,queue中的application可能消耗比此设定更多的Capacity。
- yarn.scheduler.capacity.<queue-path>.maximum-capacity:queue capacity最大占比,float类型,此值用来限制queue中的application的弹性的最大值。默认为-1禁用“弹性限制”。
- yarn.scheduler.capacity.<queue-path>.minimum-user-limit-percent:任何时间如果有资源需要,每个queue都会对分配给一个user的资源有一个强制的限制,这个user-limit可以在最大值和最小值之间。此属性就是最小值,其最大值依赖于提交applications的用户的个数。例如:假设此值为25,如果有2个用户向此queue提交application,那么每个用户最多消耗queue资源容量的50%;如果第三个user提交了application,那么任何一个user使用资源容量不能超过queue的33%;4个或者更多的用户参与,那么每个用户资源使用都不会超过queue的25%。默认值为100,表示对没有用户资源限制。
- yarn.scheduler.capacity.<queue-path>.user-limit-factor:queue容量的倍数,用来设置一个user可以获取更多的资源。默认值为1,表示一个user获取的资源容量不能超过queue配置的capacity,无论集群有多少空闲资源。此值为float类型。[最多仍不超过maximum-capacity]。
B) Running and Pending Application limits:运行中和亟待运行的应用限制
- yarn.scheduler.capacity.maximum-applications:
- yarn.scheduler.capacity.<queue-path>.maximum-applications:系统中正在运行的和pending(挂起,亟待运行)的applications的最大数量。每个queue上的限制,应该和queue capacity和user限制相互匹配(成比例的,即queue capacity较大,那么可以将此值设定的较大)。这是一个hard limit,如果达到限制,那么提交application将会被拒绝。默认值为10000。可以使用“yarn.scheduler.capacity.maximum-applications”来控制所有的queues,可以通过第二个配置项来对指定的queue-path做限制。
- yarn.scheduler.capacity.maximum-am-resource-percent:
- yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent:集群中用来运行Application masters的资源的占比。用来控制集群中active application的个数(每一个running application都会创建一个ApplicationMaster)。每个Queue上的限制,应该和queue capacity和用户限制相互匹配(成比例的,即queue capacity较大,那么可以将此值设定的较大)。此值为float类型,默认为10。
C) Queue管理和权限
- yarn.scheduler.capacity.<queue-path>.state:queue的状态,可以为“STOPPED”/"RUNNING"。如果一个queue为“STOPPED”状态,新的applications将不能提交到此queue以及其sub-queue中。如果root queue的状态为“STOPPED”,那么任何appplications都将无法提交。
- yarn.scheduler.capacity.root.<queue-path>.acl_submit_applications:ACL用来控制“who”能够想queue-path提交applications。如果user/group持有path或者parent path上必要的ACLs时,他们才能提交applications。如果在某个queue-path上没有特定配置ACLs,那么此queue-path的ACLs将继承parent path。
- yarn.scheduler.capacity.root.<queue-path>.acl_administer_queue:ACLs用来控制“who”能够管理queue-path下的application。其ACLs继承特性同上。只有具有ACLs的用户或者group才能够管理queue中的applications,包括applications的取消等。
备注:ACL的格式为"user1,user2SpaceGroup1,group2",用户之间用“,”分割,用户与group之间用“ ”(空格)分割。“*”表示任何人,默认值为“*”。
安装和配置完成之后,即可启动yarn守护进程:“sbin/start-yarn.sh”。此后我们可以通过ResourceManager Web UI查看运行情况。
如果在运行时,添加了queue或者修改了ACLs,可以通过“bin/yarn rmadmin -refreshQueues”来刷新。但是删除Queue是不支持的,需要重启yarn进程。
相关推荐
赠送jar包:hadoop-yarn-client-2.6.5.jar; 赠送原API文档:hadoop-yarn-client-2.6.5-javadoc.jar; 赠送源代码:hadoop-yarn-client-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-yarn-client-2.6.5.pom;...
赠送jar包:hadoop-yarn-common-2.6.5.jar 赠送原API文档:hadoop-yarn-common-2.6.5-javadoc.jar 赠送源代码:hadoop-yarn-common-2.6.5-sources.jar 包含翻译后的API文档:hadoop-yarn-common-2.6.5-javadoc-...
赠送jar包:hadoop-yarn-api-2.5.1.jar; 赠送原API文档:hadoop-yarn-api-2.5.1-javadoc.jar; 赠送源代码:hadoop-yarn-api-2.5.1-sources.jar; 赠送Maven依赖信息文件:hadoop-yarn-api-2.5.1.pom; 包含翻译后...
赠送jar包:hadoop-yarn-server-resourcemanager-2.6.0.jar; 赠送原API文档:hadoop-yarn-server-resourcemanager-2.6.0-javadoc.jar; 赠送源代码:hadoop-yarn-server-resourcemanager-2.6.0-sources.jar; 赠送...
Yarn 的使用方法基本与 npm 类似,比如 `yarn init` 创建新项目,`yarn add` 添加依赖,`yarn remove` 移除依赖,`yarn upgrade` 升级依赖,`yarn install` 安装项目依赖等。然而,由于 Yarn 的特性,这些操作的执行...
赠送jar包:hadoop-yarn-api-2.7.3.jar; 赠送原API文档:hadoop-yarn-api-2.7.3-javadoc.jar; 赠送源代码:hadoop-yarn-api-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-yarn-api-2.7.3.pom; 包含翻译后...
赠送jar包:hadoop-yarn-server-common-2.6.5.jar; 赠送原API文档:hadoop-yarn-server-common-2.6.5-javadoc.jar; 赠送源代码:hadoop-yarn-server-common-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-...
yarn-1.22.10编译工具yarn-1.22.10编译工具 yarn-1.22.10编译工具yarn-1.22.10编译工具 yarn-1.22.10编译工具yarn-1.22.10编译工具 yarn-1.22.10编译工具yarn-1.22.10编译工具 yarn-1.22.10编译工具yarn-1.22.10编译...
spark-2.2.0-yarn-shuffle.jar
赠送jar包:hadoop-yarn-common-2.5.1.jar; 赠送原API文档:hadoop-yarn-common-2.5.1-javadoc.jar; 赠送源代码:hadoop-yarn-common-2.5.1-sources.jar; 包含翻译后的API文档:hadoop-yarn-common-2.5.1-...
SPARK2_ON_YARN-2.4.0 jar包下载
yarn-v0.23.2.tar.gz 在安装ambari,源码编译的时候下载的文件有问题 手动下载 地址 https://github.com/yarnpkg/yarn/releases/download/v0.23.2/yarn-v0.23.2.tar.gz
hadoop2.7.4安装包补丁包,解决yarn定时调度启动问题!!
`yarn-deduplicate`就是这样一个工具,它专为解决`yarn.lock`文件中的依赖重复问题而设计,从而帮助开发者更好地管理和优化项目依赖。本文将详细讲解`yarn-deduplicate`的工作原理、使用方法以及其在前端开源生态...
3. **优化依赖结构**:通过整理和优化`yarn.lock`文件,工具可以减少潜在的冲突,提高项目构建的效率和稳定性。 4. **简化版本管理**:手动管理`yarn.lock`文件可能会导致错误,而`yarn-update-lock`自动化这一过程...
现在官网下载缓慢,这里可以直接下载最新版本安装,版本号 yarn-1.22.0.msi yarn是facebook发布的一款取代npm的包管理工具。 快速、可靠、安全的依赖管理工具
赠送jar包:hadoop-yarn-server-web-proxy-2.6.0.jar; 赠送原API文档:hadoop-yarn-server-web-proxy-2.6.0-javadoc.jar; 赠送源代码:hadoop-yarn-server-web-proxy-2.6.0-sources.jar; 赠送Maven依赖信息文件:...
计算yarn内存配置的python脚本yarn-util.py,此脚本有四个参数 参数 描述 -c CORES 每个节点CPU核数 -m MEMORY 每个节点内存总数(单位G) -d DISKS 每个节点的硬盘个数 -k HBASE 如果安装了Hbase则为True,否则为...
当官网或其他常规下载源无法找到特定版本的Yarn时,开发者可能需要花费额外的时间寻找。在这种情况下,分享这些安装包文件对于遇到同样问题的同行来说非常有用,可以节省他们寻找和验证下载源的时间。 总的来说,...
spark-1.6.1-yarn-shuffle.jar 下载。spark-1.6.1-yarn-shuffle.jar 下载。spark-1.6.1-yarn-shuffle.jar 下载。