YARN-CapacityScheduler[官网整理]

本文详细介绍了Hadoop YARN中的CapacityScheduler,一种支持多租户的调度器,它通过层级队列实现资源的灵活分配,并确保各组织的安全共享。文章还讲解了其核心功能、配置方法及关键参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【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进程。

<think>好的,我需要回答用户关于如何启动Yarn以及解决Yarn启动问题的询问。首先,我得回忆一下Yarn的基本启动方法,尤其是在Hadoop集群中的常见步骤。Yarn作为资源管理器,通常通过Hadoop的脚本启动。记得启动前需要确保HDFS已经运行,所以可能需要先启动HDFS,再启动Yarn。 接下来,用户可能遇到的问题包括配置错误、端口冲突、资源不足或依赖问题。比如,配置文件路径错误是常见的,像yarn-site.xml或core-site.xml中的配置不正确会导致启动失败。需要检查这些文件的路径和内容是否正确。另外,防火墙设置也可能拦截端口,比如ResourceManager的8088端口或NodeManager的随机端口,需要开放相应端口或关闭防火墙测试。 然后,资源不足的情况,比如内存或CPU分配不当,可能导致节点无法启动。需要调整yarn-site.xml中的参数,如yarn.nodemanager.resource.memory-mb和yarn.scheduler.maximum-allocation-mb。还有类加载错误,尤其是提交应用到Flink on Yarn时,版本不兼容可能导致类找不到,需要确认Flink和Hadoop版本的匹配。 另外,用户提到的引用中有关于Fair SchedulerCapacity Scheduler的负载均衡配置,这可能和任务分配不均有关,但用户的问题主要是启动失败,所以这部分可能暂时不需要深入,除非启动问题与调度器配置错误有关。 然后,我需要整理常见问题及解决方案,如配置错误、端口冲突、资源不足、依赖缺失、权限问题等,每个问题给出具体的解决步骤,比如检查配置文件、使用netstat查看端口、调整内存参数、安装node-sass前切换淘宝源等。还要注意引用对应的参考资料,比如引用5提到的Fair Scheduler配置,引用4提到的类加载问题。 最后,生成相关问题,可能涉及性能调优、日志分析、安全配置、调度器选择等,这些需要基于常见问题扩展,确保问题相关且有参考价值。需要确保所有LaTeX格式正确,行内公式用$包裹,独立公式用$$,但当前内容可能涉及较少数学公式,可能需要检查是否有必要添加。同时保持回答结构清晰,分步骤说明,并正确标注引用来源。</think>### Yarn启动方法与常见问题解决方案 #### 一、Yarn启动方法 1. **基于Hadoop集群启动** Yarn是Hadoop的资源管理器,启动前需确保HDFS已正常运行: ```bash # 启动HDFS $HADOOP_HOME/sbin/start-dfs.sh # 启动Yarn $HADOOP_HOME/sbin/start-yarn.sh ``` 验证启动状态: - 访问ResourceManager的Web UI:`http://<ResourceManager_IP>:8088` - 检查节点状态:`yarn node -list` 2. **单机模式启动(调试用)** 使用以下命令直接启动Yarn服务: ```bash yarn resourcemanager # 启动ResourceManager yarn nodemanager # 启动NodeManager ``` --- #### 二、Yarn启动失败常见问题及解决方案 1. **配置错误** - **问题描述** 配置文件(如`yarn-site.xml`、`core-site.xml`)路径或参数错误,导致服务无法初始化[^2]。 - **解决方案** - 检查配置文件的XML语法:`xmllint --format yarn-site.xml` - 验证关键参数(如资源分配): ```xml <!-- yarn-site.xml示例 --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>8192</value> <!-- 根据物理内存调整 --> </property> ``` 2. **端口冲突或防火墙拦截** - **问题描述** ResourceManager默认使用8088端口,若端口被占用或防火墙拦截,导致服务无法启动[^3]。 - **解决方案** - 检查端口占用:`netstat -tuln | grep 8088` - 开放防火墙:`sudo ufw allow 8088/tcp` - 修改默认端口(在`yarn-site.xml`中设置`yarn.resourcemanager.webapp.address`) 3. **资源不足** - **问题描述** 内存或CPU分配超出物理资源限制,导致NodeManager启动失败。 - **解决方案** - 调整`yarn.nodemanager.resource.memory-mb`和`yarn.nodemanager.resource.cpu-vcores`参数 - 确保总分配值不超过节点物理资源(如内存需预留部分给系统进程) 4. **依赖缺失或版本冲突** - **问题描述** 如`node-sass`安装卡死,或Flink on Yarn因版本不兼容报类加载错误[^1][^4]。 - **解决方案** - 切换镜像源加速依赖下载: ```bash yarn config set registry https://registry.npm.taobao.org ``` - 确保Flink与Hadoop版本匹配(如Flink 1.14需Hadoop 3.x) 5. **权限问题** - **问题描述** 用户未获权限执行Yarn操作,或HDFS目录权限不足。 - **解决方案** - 创建专用HDFS目录并授权: ```bash hdfs dfs -mkdir /user/yarn hdfs dfs -chown yarn:supergroup /user/yarn ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值