草庐IT

【大数据】HADOOP-YARN容量调度器配置详解

笑起来贼好看 2024-01-19 原文

目录

简介

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

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

资源分配

  • yarn.scheduler.capacity..capacity:队列资源容量的百分比,用浮点数表示(如12.5)或者是作为绝对资源队列的最小容量。在各层级上所有队列的百分比之和必须等于100。但是,如果配置的是绝对资源值,则子队列的绝对资源之和可能小于其父队列的绝对资源容量。在有空闲资源的情况,队列中的应用程序可能会消耗比队列容量更多的资源,这样可以使得队列具有弹性。这个参数对应 Yarn web页面中队列信息的 Absolute Configured Capacity。
  • yarn.scheduler.capacity..maximum-capacity:队列最大资源容量的百分比,用浮点数表示或者是作为绝对资源队列的最大容量。限制队列中应用程序的弹性(由于资源共享,一个队列使用的资源量可能超过其容量,但最多使用资源量不能超过该资源量)。1) 如果表示百分比,则值介于 0 和 100之间;2)管理员需要确保每个队列的最大绝对资源容量>=绝对资源容量。此外,将此值设置为-1表示将最大容量设置为100%。这个参数对应 Yarn web页面中队列信息的 Absolute Configured Max Capacity。
  • yarn.scheduler.capacity..minimum-user-limit-percent:对用户使用队列的最小资源比例进行限制,或者说是对每个用户最低使用资源的保障(百分比)。任何时刻,一个队列中每个用户可使用的资源量均有一定的限制。 当一个队列中同时有多个用户提交应用程序时,每个用户的使用资源量会在一个最小值和最大值之间浮动,其中,最小值就是该参数指定的值,而最大值取决于提交应用程序的用户数。比如,假设minimum-user-limit-percent为25。当两个用户向该队列提交应用程序时,每个用户可使用资源量不能超过50%,如果三个用户提交应用程序,则每个用户可使用资源量不能超多33%,如果四个或者更多用户提交应用程序,则每个用户可用资源量不能超过25%。默认值是100,表示的是对用户使用的最小资源比例不进行限制。这个参数对应 Yarn web页面中队列信息的 Configured Minimum User Limit Percent。在实际使用中,一直没有明白该参数是怎么发挥作用的,只知道该参数会对Yarn web页面中队列信息的 Max Applications Per User 的值产生影响。
  • yarn.scheduler.capacity..user-limit-factor: 这个参数配置为允许单个用户最多能获取的队列资源(即yarn.scheduler.capacity..capacity的值)的倍数,值是一个浮点值。也就是说如果把这个参数设置为大于1时,用户使用的资源可以超过队列资源。比如,假设该值为0.5,则任何时刻,单个用户使用的资源量不能超过该队列容量的50%;如果该值为2.0,则单个用户使用的最多资源量可以是该队列容量的200%,但无论配置为多大都不能超过队列的最大资源(即yarn.scheduler.capacity..maximum-capacity的值)。默认值为1,确保单个用户无论集群有多空闲,永远不会占用超过队列配置的资源量。这个参数对应 Yarn web页面中队列信息的 Configured User Limit Factor 。
  • yarn.scheduler.capacity..maximum-allocation-mb: 向ResourceManager请求分配给队列中container内存资源时的最大值。这个配置覆盖集群配置项 yarn.scheduler.maximum-allocation-mb。这个值必须小于等于集群的最大值。这个配置可以使的不同队列的container的最大内存值可以不一样,用户可以根据生产环境中实际的需求对不同的队列设置不同的值,可以更进一步提高集群的资源使用率。
  • yarn.scheduler.capacity..maximum-allocation-vcores: 向ResourceManager请求分配给队列中container vcore资源时的最大值。这个配置覆盖集群配置项yarn.scheduler.maximum-allocation-vcores。这个值必须小于等于集群的最大值。这个配置可以使的不同队列的container的最大内存值可以不一样,用户可以根据生产环境中实际的需求对不同的队列设置不同的值,可以更进一步提高集群的资源使用率。
  • yarn.scheduler.capacity..user-settings..weight: 此浮点值用于计算队列中用户的用户限制资源值。该值将使每个用户的权重大于或小于队列中的其他用户。例如,如果用户A在队列中收到的资源比用户B和C多50%,则用户A的此属性将设置为1.5。用户B和C将设置为默认值1.0。也就说同一队列中权重越大的用户获得的资源将会越多。

应用程序数目限制

  • yarn.scheduler.capacity.maximum-applications / yarn.scheduler.capacity..maximum-applications :集群或者队列中同时处于running和pending状态的应用程序数目上限,这是一个强限制,一旦集群中应用程序数目超过该上限,后续提交的应用程序将被拒绝,默认值为10000。整个root队列的数目上限可通过参数yarn.scheduler.capacity.maximum-applications设置(可看做默认值),单个队列可通过参数 yarn.scheduler.capacity..maximum-applications 单独设置自己的值。如果不单独设置,那么对应队列的maximum-applications会按照资源占比计算。如某个队列的资源占比是15%,那么它的maximum-applications就是10000 * 15 % = 1500。在实际使用中发现,如果队列使用了绝对资源格式配置,则单独指定的方式不会生效,只会根据队列资源占比来计算。这个参数对应 Yarn web页面中队列信息的__Max Applications__。

  • yarn.scheduler.capacity.maximum-am-resource-percent / yarn.scheduler.capacity..maximum-am-resource-percent:集群中用于运行应用程序ApplicationMaster的资源比例上限,该参数通常用于限制处于活动状态的应用程序数目。该参数类型为浮点型,默认是0.1,表示10%。所有队列的ApplicationMaster资源比例上限可通过参数yarn.scheduler.capacity. maximum-am-resource-percent设置(可看做默认值),单个队列可通过参数__yarn.scheduler.capacity.. maximum-am-resource-percent__ 单独设置自己的值。如果不单独设置,那么就使用 yarn.scheduler.capacity.maximum-am-resource-percent 的值。这个参数对应 Yarn web页面中队列信息的__Configured Max Application Master Limit__。

队列权限管理

  • yarn.scheduler.capacity..state :队列状态可以为STOPPED或者RUNNING,如果一个队列处于STOPPED状态,用户不可以将应用程序提交到该队列或者它的子队列中,类似的,如果ROOT队列处于STOPPED状态,用户不可以向集群中提交应用程序,但正在运行的应用程序仍可以正常运行结束,以便队列可以优雅地退出。这个参数对应 Yarn web页面中队列信息的 Queue State。
  • yarn.scheduler.capacity.root..acl_submit_applications:限定哪些Linux用户/用户组可向给定队列中提交应用程序。需要注意的是,该属性具有继承性,即如果一个用户可以向某个队列中提交应用程序,则它可以向它的所有子队列中提交应用程序。配置该属性时,用户之间或组之间用“,”分割,用户和用户组之间用空格分割,比如“user1,user2 group1,group2”。
  • yarn.scheduler.capacity.root..acl_administer_queue:为队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等。如果该属性的ACL未指定则从其父队列继承。

基于用户或组的队列映射

多租户场景下,不同的用户需要使用不同的队列,通过队列映射特性可以使的不同用户提交的作业运作到指定的队列中。

  • yarn.scheduler.capacity.queue-mappings:该配置可以将用户或组映射到指定的队列。用户可以映射一个单独的用户或者一个用户列表到队列。语法为:[u or g]:[name]:[queue_name][,next_mapping]*。这里,u或者g表是映射是针对用户还是组。u表示用户,g表示组。name 表示用户名或者组名。要指定提交应用程序的用户,可以用%user表示。queue_name表示应用程序映射的队列名称。如果要指定队列名称与用户名称相同,可以用%user表示。如果要指定队列名称与用户所属的primary组名相同,可以用%primary_group表示。
  • yarn.scheduler.capacity.queue-mappings-override.enable:指定用户指定的队列是否可以被覆盖。布尔值,默认为false。
<property>
   <name>yarn.scheduler.capacity.queue-mappings</name>
   <value>u:user1:queue1,g:group1:queue2,u:%user:%user,u:user2:%primary_group</value>
 </property>

上述配置中,用户user1映射到队列queue1,组group1映射到队列queue2,u:%user:%user,是将用户映射到与用户名同名的队列中,user2映射到与其primary group同名的队列中。映射是从左到右进行匹配的,第一个匹配的映射将会被使用。

应用程序的生存期(lifetime)

从Apache hadoop2.9.0开始, Capacity Scheduler新增支持应用程序的生存期管理特性。

  • yarn.scheduler.capacity..maximum-application-lifetime:队列中应用程序的最大生存期(单位为秒)。任何设置为小于等于0的值,表示不启用此功能。该配置是一个硬限制,当应用程序的运行时间超出该时间后将会被kill掉,用户也可以在提交应用程序的context中指定该值,但是如果用户设置的值超出此处设置的值,那么用户指定的值将会被覆盖。 该特性只适用于叶子队列。
  • yarn.scheduler.capacity.root..default-application-lifetime:队列中应用程序的默认生存期(单位为秒)。任何设置为小于等于0的值,表示不启用此功能。当用户提交作业时不指定生存期的时候会使用该默认值,该配置不能大于最大生存期。 该特性只适用于叶子队列。

希望对正在查看文章的您有所帮助,记得关注、评论、收藏,谢谢您

有关【大数据】HADOOP-YARN容量调度器配置详解的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  3. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  4. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  5. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  6. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  7. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  8. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  9. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  10. ruby-on-rails - 创建 ruby​​ 数据库时惰性符号绑定(bind)失败 - 2

    我正在尝试在Rails上安装ruby​​,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf

随机推荐