yarn

简介:

前言:

       基于标签的调度解决的核心需求是实现部分资源的完全隔离,以及由此基础之上的各个资源池之间的资源互助,最终达到隔离并且弹性的计算形态。

该特性开发现状:

      最新版本2.8.x:

                       1.不支持标签表达式,如:&&,|,*

                       2.资源共享方式不实用,如:2.8.x的模式是labeled资源池向default资源池共享资源。

                       3.user-limit限制不可用,如:在队列中用户所能使用的资源不受当前活跃用户数限制。

                       4.BUG,如:队列可同时运行am限制计算错误,队列总资源显示错误

如何配置:

  1.       在hdfs上创建用于保存label相关数据的目录(相关数据后期有Patch改为用zk存储)。

    1. hdfs dfs -mkdir /xxx/xxx/node-label/

    2. hdfs dfs -chown yarn:yarn /xxx/xxx/node-label/

    3. hdfs dfs -chmod 700 /xxx/xxx/node-label/

  2.       在yarn-site.xml文件中配置:

    1. yarn.node-labels.enabled=true
    2. yarn.node-labels.fs-store.root-dir=/xxx/xxx/node-label
    3. yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
  3.       配置capacity-scheduler.xml(后面详解)

如何管理标签:

       添加标签:
              yarn rmadmin -addToClusterNodeLabels "<label1>(exclusive=<true|false>),<label2>(exclusive=<true|false>)"

                        说明:exclusive是指该标签管理的资源是否允许分享资源给default分区的任务。

      查看添加的标签:
              yarn cluster --list-node-labels
      给机器添加标签:
              yarn rmadmin -replaceLabelsOnNode "<node1>:<port>=<label1> <node2>:<port>=<label2>"

                        说明:1.node1处必须填写域名。2.如果“=label1“处为空,即表示重设机器标签为空。3.port处为空,即表示设置该机器上所有nm的标签。

      删除标签:

                        yarn rmadmin -removeFromClusterNodeLabels "x","y"

配置capacity-scheduler.xml:

<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>a,b</value>
</property>
说明:集群有多少队列
<property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.x.capacity</name>
<value> 100 </value>
</property>
说明:集群可用的X标签资源量
<property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.y.capacity</name>
<value> 100 </value>
</property>
说明:同理
注(以下不用配置,对于 default 分区的资源,root队列默认是可以访问的):
/**
*<property>
*    <name>yarn.scheduler.capacity.root.capacity</name>
*    <value>100</value>
*</property>
*/
<!-- configuration of queue-a -->
<property>
<name>yarn.scheduler.capacity.root.a.accessible-node-labels</name>
<value>x,y</value>
</property>
说明:配置队列a能访问的标签,如果设置队列只能访问 default 分区资源则值留空格“ ”,如果值为 null 则队列访问权限继承父队列
<property>
<name>yarn.scheduler.capacity.root.a.capacity</name>
<value> 40 </value>
</property>
说明:配置队列a能访问的 default 分区的资源量
<property>
<name>yarn.scheduler.capacity.root.a.accessible-node-labels.x.capacity</name>
<value> 100 </value>
</property>
说明:同理
<property>
<name>yarn.scheduler.capacity.root.a.accessible-node-labels.y.capacity</name>
<value> 50 </value>
</property>
说明:同理
<!-- configuration of queue-b -->
说明:队列b的配置同理
<property>
<name>yarn.scheduler.capacity.root.b.accessible-node-labels</name>
<value>y</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.b.capacity</name>
<value> 60 </value>
</property>
<property>
<name>yarn.scheduler.capacity.root.b.accessible-node-labels.y.capacity</name>
<value> 50 </value>
</property>
 
必须设置每个队列的默认提交标签(重要)如:
<property>
<name>yarn.scheduler.capacity.root.a. default -node-label-expression</name>
<value>x</value>
</property>
 
<property>
<name>yarn.scheduler.capacity.root.b.b1. default -node-label-expression</name>
<value> </value>
</property>
说明:如果值为“ ”则默认提交到 default 分区,不能为“”相当于没设,不能为*,&&,|等,不支持表达式

如何使用Node-label:

在Yarn中一共有4种方式设置Container的运行标签:

  • 配置队列的默认标签(见上文配置)

  • ApplicationSubmissionContext.setNodeLabelExpression();
    说明:设置作业所有的container运行的标签。

  • ApplicationSubmissionContext.setAMContainerResourceRequest().setNodeLabelExpression()
    说明:设置AMContainer的运行标签

  • ResourceRequest.setNodeLabelExpression()
    说明:设置最终向Capacityscheduler发送的RR的标签

说明:

      以上方式的优先级依次加强。

      具体以下表的形式(所有方式使用首字母缩写):

 

Queue default Label

ASC.setNLE()

ASC.setACRR().setNLE()

RR.setNLE()

Queue default Label 覆盖 被覆盖 被覆盖 被覆盖
ASC.setNLE() 覆盖 覆盖 被覆盖 被覆盖
ASC.setACRR().setNLE() 覆盖 覆盖 覆盖 被覆盖
RR.setNLE() 覆盖 覆盖 覆盖 覆盖

资源模式:

  • 非共享模式



  • 说明:首先作业使用资源的原则是,提交时指定了标签则在对应标签运行,如果没有指定标签,则在空白标签运行。
              在非共享模式下,提交到空白标签里的作业如果需要资源,即使标签A,B中有剩余资源,也不能被使用。

  • 共享模式



  • 说明:在上文情况下,空白标签的作业可以使用标签A,B中的资源,当标签A,B中再次需要资源时,会抢占回被共享的那部分。

典型应用场景:

         

参考资料:


本文转自 远永201314 51CTO博客,原文链接:http://blog.51cto.com/7336056/1946965

相关文章
|
4月前
|
监控 安全 Java
Spring AOP实现原理
本内容主要介绍了Spring AOP的核心概念、实现机制及代理生成流程。涵盖切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)等关键概念,解析了JDK动态代理与CGLIB代理的原理及对比,并深入探讨了通知执行链路和责任链模式的应用。同时,详细分析了AspectJ注解驱动的AOP解析过程,包括切面识别、切点表达式匹配及通知适配为Advice的机制,帮助理解Spring AOP的工作原理与实现细节。
|
10月前
|
算法 网络协议 数据挖掘
阿里云通用算力型U1实例性能、适用场景、与经济型e区别、收费标准参考
在阿里云目前的活动中,通用算力型u1实例是一款价格相对较低且性价比较高的实例规格,通用算力型Universal实例(U实例)能提供均衡的计算、内存和网络资源,支持多种处理器和多种处理器内存配比。该类型实例依托阿里云资源池化技术和智能调度算法进行动态资源管理,为您的应用提供持续的算力保障、稳定性保障、供应及弹性保障,可以满足大多数场景下的应用需求,是一款具有高性价比的企业级实例。本文为大家介绍通用算力型U1实例的性能、适用场景、收费标准,以及和经济型e实例的区别,以供参考。
|
XML Java 数据库连接
Spring Boot集成MyBatis
主要系统的讲解了 Spring Boot 集成 MyBatis 的过程,分为基于 xml 形式和基于注解的形式来讲解,通过实际配置手把手讲解了 Spring Boot 中 MyBatis 的使用方式,并针对注解方式,讲解了常见的问题已经解决方式,有很强的实战意义。在实际项目中,建议根据实际情况来确定使用哪种方式,一般 xml 和注解都在用。
|
11月前
|
消息中间件 存储 监控
RocketMQ消息重试机制解析!
RocketMQ消息重试机制解析!
747 1
RocketMQ消息重试机制解析!
|
Java 应用服务中间件 nginx
【Azure Spring Apps】Spring App部署上云遇见 502 Bad Gateway nginx
在部署Azure Spring App后,用户遇到502 Bad Gateway错误,问题源于Nginx。解决方案是检查并关闭Spring App的ingress-to-app TLS配置,因为若未启用HTTPS访问,Nginx通过HTTPS访问应用会导致此错误。
199 2
|
JavaScript 前端开发 vr&ar
60个令人兴奋的ThreeJS网站示例
Three.js是一个JavaScript库,它使在Web上创建3D图形比直接使用WebGL容易得多。Three.js是网络上最受欢迎的3D JavaScript库,很容易上手。因此,在这篇文章中,我将展示一些创意网站的例子,以获得灵感,以使用Three.js JavaScript库创建和动画令人兴奋的基于3D浏览器的图形。
1386 0
|
Ubuntu
ubuntu apt-get 安装软件时自动yes
ubuntu apt-get 安装软件时自动yes
347 0
|
弹性计算 网络安全
ECS由于/usr/lib/systemd/system/sshd.service配置错误导致ssh无法启动
ECS由于/usr/lib/systemd/system/sshd.service配置错误导致ssh无法启动
|
人工智能 自然语言处理 算法
《阿里云智能客服知识运营白皮书》电子版
白皮书以阿里云智能客服系统为应用标的,面向智能客服中的知识定义、知识应用、知识梳理方法三大环节进行描述和说明,希望为智能客服领域的知识应用提供具备指导性意义的方法论。
299 0
《阿里云智能客服知识运营白皮书》电子版
|
消息中间件 存储 Cloud Native
阿里云 EventBridge 事件驱动架构实践
我们认为 EventBridge 是云原生时代新的计算驱动力,这些数据可以驱动云的计算能力,创造更多业务价值。
阿里云 EventBridge 事件驱动架构实践