大数据之Yarn——Capacity调度器概念以及配置

试想一下,你现在所在的公司有一个hadoop的集群。但是A项目组经常做一些定时的BI报表,B项目组则经常使用一些软件做一些临时需求。那么他们肯定会遇到同时提交任务的场景,这个时候到底如何分配资源满足这两个任务呢?是先执行A的任务,再执行B的任务,还是同时跑两个?

如果你存在上述的困惑,可以多了解一些yarn的资源调度器。

在Yarn框架中,调度器是一块很重要的内容。有了合适的调度规则,就可以保证多个应用可以在同一时间有条不紊的工作。最原始的调度规则就是FIFO,即按照用户提交任务的时间来决定哪个任务先执行,但是这样很可能一个大任务独占资源,其他的资源需要不断的等待。也可能一堆小任务占用资源,大任务一直无法得到适当的资源,造成饥饿。所以FIFO虽然很简单,但是并不能满足我们的需求。

yarn默认还提供了两种调度规则,capacity和fair share。本篇就主要介绍下capacity调度器:

什么是capacity调度器

Capacity调度器说的通俗点,可以理解成一个个的资源队列。这个资源队列是用户自己去分配的。比如我大体上把整个集群分成了AB两个队列,A队列给A项目组的人来使用。B队列给B项目组来使用。但是A项目组下面又有两个方向,那么还可以继续分,比如专门做BI的和做实时分析的。那么队列的分配就可以参考下面的树形结构:

root
------a[60%]
      |---a.bi[40%]
      |---a.realtime[60%]
------b[40%]

a队列占用整个资源的60%,b队列占用整个资源的40%。a队列里面又分了两个子队列,一样也是2:3分配。

虽然有了这样的资源分配,但是并不是说a提交了任务,它就只能使用60%的资源,那40%就空闲着。只要资源实在空闲状态,那么a就可以使用100%的资源。但是一旦b提交了任务,a就需要在释放资源后,把资源还给b队列,直到ab平衡在3:2的比例。

粗粒度上资源是按照上面的方式进行,在每个队列的内部,还是按照FIFO的原则来分配资源的。

特性

capacity调度器具有以下的几个特性:

  • 层次化的队列设计,这种层次化的队列设计保证了子队列可以使用父队列设置的全部资源。这样通过层次化的管理,更容易合理分配和限制资源的使用。
  • 容量保证,队列上都会设置一个资源的占比,这样可以保证每个队列都不会占用整个集群的资源。
  • 安全,每个队列又严格的访问控制。用户只能向自己的队列里面提交任务,而且不能修改或者访问其他队列的任务。
  • 弹性分配,空闲的资源可以被分配给任何队列。当多个队列出现争用的时候,则会按照比例进行平衡。
  • 多租户租用,通过队列的容量限制,多个用户就可以共享同一个集群,同事保证每个队列分配到自己的容量,提高利用率。
  • 操作性,yarn支持动态修改调整容量、权限等的分配,可以在运行时直接修改。还提供给管理员界面,来显示当前的队列状况。管理员可以在运行时,添加一个队列;但是不能删除一个队列。管理员还可以在运行时暂停某个队列,这样可以保证当前的队列在执行过程中,集群不会接收其他的任务。如果一个队列被设置成了stopped,那么就不能向他或者子队列上提交任务了。
  • 基于资源的调度,协调不同资源需求的应用程序,比如内存、CPU、磁盘等等。

关于调度器的配置

配置调度器

在ResourceManager中配置它要使用的调度器,配置方式是修改conf/yarn-site.xml,设置属性:

yarn.resourcemanager.scheduler.class
=>
org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

配置队列

调度器的核心就是队列的分配和使用了,修改conf/capacity-scheduler.xml可以配置队列。

Capacity调度器默认有一个预定义的队列——root,所有的队列都是它的子队列。队列的分配支持层次化的配置,使用.来进行分割,比如yarn.scheduler.capacity.<queue-path>.queues.

下面是配置的样例,比如root下面有三个子队列:

<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>

队列属性

  • yarn.scheduler.capacity..capacity

它是队列的资源容量占比(百分比)。系统繁忙时,每个队列都应该得到设置的量的资源;当系统空闲时,该队列的资源则可以被其他的队列使用。同一层的所有队列加起来必须是100%。

  • yarn.scheduler.capacity..maximum-capacity

队列资源的使用上限。由于系统空闲时,队列可以使用其他的空闲资源,因此最多使用的资源量则是该参数控制。默认是-1,即禁用。

  • yarn.scheduler.capacity..minimum-user-limit-percent

每个任务占用的最少资源。比如,你设置成了25%。那么如果有两个用户提交任务,那么每个任务资源不超过50%。如果3个用户提交任务,那么每个任务资源不超过33%。如果4个用户提交任务,那么每个任务资源不超过25%。如果5个用户提交任务,那么第五个用户需要等待才能提交。默认是100,即不去做限制。

  • yarn.scheduler.capacity..user-limit-factor

每个用户最多使用的队列资源占比,如果设置为50.那么每个用户使用的资源最多就是50%。

运行和提交应用限制

  • yarn.scheduler.capacity.maximum-applications / yarn.scheduler.capacity..maximum-applications

设置系统中可以同时运行和等待的应用数量。默认是10000.

  • yarn.scheduler.capacity.maximum-am-resource-percent / yarn.scheduler.capacity..maximum-am-resource-percent

设置有多少资源可以用来运行app master,即控制当前激活状态的应用。默认是10%。

队列管理

  • yarn.scheduler.capacity..state

队列的状态,可以使RUNNING或者STOPPED.如果队列是STOPPED状态,那么新应用不会提交到该队列或者子队列。同样,如果root被设置成STOPPED,那么整个集群都不能提交任务了。现有的应用可以等待完成,因此队列可以优雅的退出关闭。

  • yarn.scheduler.capacity.root..acl_submit_applications

访问控制列表ACL控制谁可以向该队列提交任务。如果一个用户可以向该队列提交,那么也可以提交任务到它的子队列。

  • yarn.scheduler.capacity.root..acl_administer_queue

设置队列的管理员的ACL控制,管理员可以控制队列的所有应用程序。同样,它也具有继承性。

注意:ACL的设置是user1,user2 group1,group2这种格式。如果是*则代表任何人。空格表示任何人都不允许。默认是*.

其他属性

  • yarn.scheduler.capacity.resource-calculator

资源计算方法,默认是org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator,它只会计算内存。DominantResourceCalculator则会计算内存和CPU。

  • yarn.scheduler.capacity.node-locality-delay

调度器尝试进行调度的次数。一般都是跟集群的节点数量有关。默认40(一个机架上的节点数)

一旦设置完这些队列属性,就可以在web ui上看到了。可以访问下面的连接:

xxx:8088/scheduler

修改队列配置

如果想要修改队列或者调度器的配置,可以修改

vi $HADOOP_CONF_DIR/capacity-scheduler.xml

修改完成后,需要执行下面的命令:

$HADOOP_YARN_HOME/bin/yarn rmadmin -refreshQueues

注意:

  • 队列不能被删除,只能新增。
  • 更新队列的配置需要是有效的值
  • 同层级的队列容量限制想加需要等于100%。

参数

Hadoop YARN配置参数剖析(5)—Capacity Scheduler相关参数

capacity调度器官方文档

《Hadoop Yarn权威指南》

本文转自博客园xingoo的博客,原文链接:大数据之Yarn——Capacity调度器概念以及配置,如需转载请自行联系原博主。

时间: 2024-09-28 17:11:39

大数据之Yarn——Capacity调度器概念以及配置的相关文章

[大数据之Yarn]——资源调度浅学

在hadoop生态越来越完善的背景下,集群多用户租用的场景变得越来越普遍,多用户任务下的资源调度就显得十分关键了.比如,一个公司拥有一个几十个节点的hadoop集群,a项目组要进行一个计算任务,b项目组要计算一个任务,集群到底先执行哪个任务?如果你需要提交1000个任务呢?这些任务又是如何执行的? 为了解决上面的问题,就需要在hadoop集群中引入资源管理和任务调度的框架.这就是--Yarn. YARN的发展 Yarn在第一代的时候,框架跟hdfs差不多.一个主节点jobtracker,用来分配

《大数据导论》——1.1节概念与术语

1.1 概念与术语 作为开端,我们首先要定义几个基本概念和术语,以便大家理解.1.1.1 数据集 我们把一组或者一个集合的相关联的数据称作数据集.数据集中的每一个成员数据,都应与数据集中的其他成员拥有相同的特征或者属性.以下是一些数据集的例子: 存储在一个文本文件中的推文(tweet) 一个文件夹中的图像文件 存储在一个CSV格式文件中的从数据库中提取出来的行数据 存储在一个XML文件中的历史气象观测数据 图1.1中显示了三种不同数据格式的数据集. 1.1.3 数据分析学 数据分析学是一个包含数

WCF大数据量压缩传输,web.config怎么配置?

问题描述 准备做个新的项目,因为wcf有数据传输的限制,所以准备压缩后再传输到客户端处理:有一个博客,是使用gzipstream压缩的,这里他说的只要引用dll,然后配置config就自动压缩解压了,但是这里报错:求助大牛,或者讲一下怎么在配置文件中自动压缩解压,还有就是大数据量传输用这种方式合适吗? 解决方案 解决方案二:自己顶,等待大牛!解决方案三:那个可以无视,可以正常运行的.解决方案四:引用2楼qldsrx的回复: 那个可以无视,可以正常运行的. 客户端引用服务就不行了...解决方案五:

大数据学习之路(持续更新中...)

在16年8月份至今,一直在努力学习大数据大数据相关的技术,很想了解众多老司机的学习历程.因为大数据涉及的技术很广需要了解的东西也很多,会让很多新手望而却步.所以,我就在自己学习的过程中总结一下学到的内容以及踩到的一些坑,希望得到老司机的指点和新手的借鉴. 前言 在学习大数据之前,先要了解他解决了什么问题,能给我们带来什么价值.一方面,以前IT行业发展没有那么快,系统的应用也不完善,数据库足够支撑业务系统.但是随着行业的发展,系统运行的时间越来越长,搜集到的数据也越来越多,传统的数据库已经不能支撑

Yarn 调度器Scheduler详解

理想情况下,我们应用对Yarn资源的请求应该立刻得到满足,但现实情况资源往往是有限的,特别是在一个很繁忙的集群,一个应用资源的请求经常需要等待一段时间才能的到相应的资源.在Yarn中,负责给应用分配资源的就是Scheduler.其实调度本身就是一个难题,很难找到一个完美的策略可以解决所有的应用场景.为此,Yarn提供了多种调度器和可配置的策略供我们选择. 一.调度器的选择 在Yarn中有三种调度器可以选择:FIFO Scheduler ,Capacity Scheduler,FairS ched

【大数据开发套件调度配置实践】——不同周期任务依赖配置

大数据开发过程中常遇到不同运行周期的任务进行依赖,常见 天任务依赖小时任务. 小时任务依赖分钟任务 .那么如何通过大数据开发套件开发这两种场景呢? 本文将从这两个场景出发,结合调度依赖/参数/调度执行等,介绍不同周期调度依赖的最佳操作实践. 再此之前,我们先明确几个概念: 业务日期:业务数据产生的日期,这里指完整一天的业务数据.在大数据开发套件里任务每天能处理的最近的完整一天业务数据是昨天的数据,所以业务日期=日常调度日期-1天. 依赖关系:依赖关系是描述两个或多个节点/工作流之间的语义连接关系

“大数据概念”横空出世

继物联网.云计算.移动互联网之后,科技股中的"大数据概念"横空出世,天玑科技.银信科技.拓尔思等3股放量突破,浪潮信息.同有科技.美亚柏科.用友软件等也有不错表现.在工信部发布的物联网十二五规划里,把信息处理技术作为4项关键技术创新工程之一提出来,其中包括海量数据存储.数据挖掘.图像视频智能分析,这些都是大数据的重要组成部分. 股民小郝:"大家还没搞清楚PC时代的时候,移动互联网来了:还没搞清楚移动互联网的时候,大数据时代来了."上周五晚上,马云发表卸任演讲时如是说

利用yarn capacity scheduler在EMR集群上实现大集群的多租户的集群资源隔离和quota限制

背景 使用过hadoop的人基本都会考虑集群里面资源的调度和优先级的问题,假设你现在所在的公司有一个大hadoop的集群,有很多不同的业务组同时使用.但是A项目组经常做一些定时的BI报表,B项目组则经常使用一些软件做一些临时需求.那么他们肯定会遇到同时提交任务的场景,这个时候到底如何分配资源满足这两个任务呢?是先执行A的任务,再执行B的任务,还是同时跑两个? 目前一些使用EMR的大公司,会使用一个比较大的集群,来共公司内部不同业务组的人共同使用,相对于使用多个小集群,使用大的集群一方面可以达到更

大数据技术在发展 挑战与机遇并存

大数据技术是在传统数据处理手段无法应对海量数据的实时需求的情况下,采用新的信息技术来应对大数据爆发进行数据处理的技术.大数据技术一般可以包括基础架构支持.数据采集.数据存储.数据计算和数据展现交互等. 大数据技术的分类 大数据技术涵盖的范围十分广阔.基础架构支持方面主要包括了支撑大数据处理的基础架构级数据中心管理.云计算平台.云存储设备及技术.网络技术.资源监控等技术.而为了处理数据,则需要有大规模物理资源的云数据中心和具备高效的调度管理功能的云计算平台的支撑. 数据采集技术方面包含了数据采集的