yarn队列提交spark任务权限控制
转载请注明出处:http://www.cnblogs.com/xiaodf/
1 CapacityScheduler
1.1 模型介绍
Capacity Scheduler是一个hadoop支持的可插拔的资源调度器,它允许多租户安全的共享集群资源,它们的applications在容量限制之下,可以及时的分配资源。使用操作友好的方式运行hadoop应用,同时最大化吞吐能力和集群利用率。
Capacity Scheduler提供的核心理念就是Queues(队列),这些queues通常有管理员设定。为了在共享资源上,提供更多的控制和预见性,Capacity Scheduler支持多级queue,以确保在其他queues允许使用空闲资源之前,资源可以在一个组织的sub-queues之间共享。
1.2 资源分配相关参数
capacity:Queue的容量百分比,float类型,例如12.5。所有Queue的各个层级的capacity总和必须为100。因为弹性资源分配,如果集群中有较多的空闲资源,queue中的application可能消耗比此设定更多的Capacity。
maximum-capacity: queue capacity最大占比,float类型,此值用来限制queue中的application的弹性的最大值。默认为-1禁用“弹性限制”。
minimum-user-limit-percent:任何时间如果有资源需要,每个queue都会对分配给一个user的资源有一个强制的限制,这个user-limit可以在最大值和最小值之间。此属性就是最小值,其最大值依赖于提交applications的用户的个数。例如:假设此值为25,如果有2个用户向此queue提交application,那么每个用户最多消耗queue资源容量的50%;如果第三个user提交了application,那么任何一个user使用资源容量不能超过queue的33%;4个或者更多的用户参与,那么每个用户资源使用都不会超过queue的25%。默认值为100,表示对没有用户资源限制。
user-limit-factor:queue容量的倍数,用来设置一个user可以获取更多的资源。默认值为1,表示一个user获取的资源容量不能超过queue配置的capacity,无论集群有多少空闲资源。此值为float类型。[最多仍不超过maximum-capacity]。
1.3 限制应用程序数目相关参数
maximum-applications :集群或者队列中同时处于等待和运行状态的应用程序数目上限,这是一个强限制,一旦集群中应用程序数目超过该上限,后续提交的应用程序将被拒绝,默认值为10000。所有队列的数目上限可通过参数yarn.scheduler.capacity.maximum-applications设置(可看做默认值),而单个队列可通过参数yarn.scheduler.capacity..maximum-applications设置适合自己的值。
maximum-am-resource-percent:集群中用于运行应用程序ApplicationMaster的资源比例上限,该参数通常用于限制处于活动状态的应用程序数目。该参数类型为浮点型,默认是0.1,表示10%。所有队列的ApplicationMaster资源比例上限可通过参数yarn.scheduler.capacity. maximum-am-resource-percent设置(可看做默认值),而单个队列可通过参数yarn.scheduler.capacity.. maximum-am-resource-percent设置适合自己的值。
1.4 队列访问和权限控制参数
state :队列状态可以为STOPPED或者RUNNING,如果一个队列处于STOPPED状态,用户不可以将应用程序提交到该队列或者它的子队列中,类似的,如果ROOT队列处于STOPPED状态,用户不可以向集群中提交应用程序,但正在运行的应用程序仍可以正常运行结束,以便队列可以优雅地退出。
acl_submit_applications:限定哪些Linux用户/用户组可向给定队列中提交应用程序。需要注意的是,该属性具有继承性,即如果一个用户可以向某个队列中提交应用程序,则它可以向它的所有子队列中提交应用程序。配置该属性时,用户之间或用户组之间用“,”分割,用户和用户组之间用空格分割,比如“user1, user2 group1,group2”。
acl_administer_queue:为队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等。同样,该属性具有继承性,如果一个用户可以向某个队列中提交应用程序,则它可以向它的所有子队列中提交应用程序。
2 线上实例
2.1 配置
2.1.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>
2.1.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..queues”风格来定义。子节点不从父节点上直接继承properties,除非另有说明。例如,root queue有a,b,c三个子节点,以及a和b也有自己的sub-queue。
在CM页面,进入yarn配置,选择“容量调度程序配置高级配置代码段(安全阀)”,写入如下内容,保存。
如果在运行时,添加了queue或者修改了ACLs,可按页面提示刷新。但是删除Queue是不支持的,需要依次重启备用和活动的ResourceManager角色使配置生效。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,wa,yq</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.capacity</name>
<value>100</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.acl_administer_queue</name>
<value>admin</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.acl_submit_applications</name>
<value>admin</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>30</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
<value>35</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.wa.capacity</name>
<value>45</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.wa.maximum-capacity</name>
<value>50</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.yq.capacity</name>
<value>25</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.yq.maximum-capacity</name>
<value>30</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.wa.acl_administer_queue</name>
<value>admin,user01</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.wa.acl_submit_applications</name>
<value>admin,user01</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.yq.acl_administer_queue</name>
<value>admin,user02</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.yq.acl_submit_applications</name>
<value>admin,user02</value>
</property>
<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
</property>
</configuration>
以上配置生效后可以进入Yarn Web UI页面查看,队列设置是否正确,如下所示:
注意:
1、 所有队列的capacity容量和为100%
2、 配置文件标红参数:
yarn.scheduler.capacity.root.acl_administer_queue
和yarn.scheduler.capacity.root.acl_submit_applications表示admin用户为根队列的超级用户,即可操作根队列下的所有子队列,这个两个参数必须设置,否则,对子队列设置的用户访问控制不会生效。
2.2 测试
【2.1 配置】里我们分别配置了队列wa和yq的可访问用户,即用户user01可访问队列wa,用户user02可访问队列yq,用户admin对可访问所有队列,下面我们对以上设置进行测试。
我们通过在yarn队列中能否提交spark-shell来验证用户对队列是否有访问权限。
2.2.1 用户user01能访问队列wa,不能访问队列yq
[root@node1a142 ~]# kinit user01
Password for user01@HADOOP.COM:
用户user01对队列wa有访问权限,spark-shell正常提交
[root@node1a142 ~]# spark-shell --master yarn --queue wa
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 1.6.0
/_/
Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67)
Type in expressions to have them evaluated.
Type :help for more information.
Spark context available as sc (master = yarn-client, app id = application_1483697304069_0012).
SQL context available as sqlContext.
scala>
用户user01对队列yq没有访问权限,spark-shell提交报错
[root@node1a142 ~]# spark-shell --master yarn --queue yq
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 1.6.0
/_/
Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67)
Type in expressions to have them evaluated.
Type :help for more information.
17/01/09 14:29:09 ERROR spark.SparkContext: Error initializing SparkContext.
org.apache.spark.SparkException: Yarn application has already ended! It might have been killed or unable to launch application master.
不指定队列时,使用的是默认队列default,用户user01没有权限,spark-shell提交报错
[root@node1a142 ~]# spark-shell --master yarn
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 1.6.0
/_/
Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67)
Type in expressions to have them evaluated.
Type :help for more information.
17/01/09 16:50:15 ERROR spark.SparkContext: Error initializing SparkContext.
org.apache.spark.SparkException: Yarn application has already ended! It might have been killed or unable to launch application master.
2.2.2 用户user02能访问队列yq,不能访问队列wa
跟user01测试结果相似,此处略。
2.2.3 用户admin能访问所有队列
[root@node1a142 ~]# kinit admin
Password for admin@HADOOP.COM:
用户admin对队列wa有访问权限,spark-shell正常提交
[root@node1a142 ~]# spark-shell --master yarn --queue wa
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 1.6.0
/_/
Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67)
Type in expressions to have them evaluated.
Type :help for more information.
Spark context available as sc (master = yarn-client, app id = application_1483949565487_0001).
SQL context available as sqlContext.
scala>
用户admin对队列yq有访问权限,spark-shell正常提交
[root@node1a142 ~]# spark-shell --master yarn --queue yq
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 1.6.0
/_/
Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67)
Type in expressions to have them evaluated.
Type :help for more information.
Spark context available as sc (master = yarn-client, app id = application_1483949565487_0002).
SQL context available as sqlContext.
scala>
用户admin对默认队列default也有访问权限,spark-shell正常提交
[root@node1a142 ~]# spark-shell --master yarn
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 1.6.0
/_/
Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67)
Type in expressions to have them evaluated.
Type :help for more information.
Spark context available as sc (master = yarn-client, app id = application_1483949565487_0003).
SQL context available as sqlContext.
scala>
3 参考文档
https://hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html
订阅关注微信公众号《大数据技术进阶》,及时获取更多大数据架构和应用相关技术文章!
yarn队列提交spark任务权限控制的更多相关文章
- Spark On Yarn:提交Spark应用程序到Yarn
转载自:http://lxw1234.com/archives/2015/07/416.htm 关键字:Spark On Yarn.Spark Yarn Cluster.Spark Yarn Clie ...
- Idea里面远程提交spark任务到yarn集群
Idea里面远程提交spark任务到yarn集群 1.本地idea远程提交到yarn集群 2.运行过程中可能会遇到的问题 2.1首先需要把yarn-site.xml,core-site.xml,hdf ...
- Spark2.3(四十):如何使用java通过yarn api调度spark app,并根据appId监控任务,关闭任务,获取任务日志
背景: 调研过OOZIE和AZKABA,这种都是只是使用spark-submit.sh来提交任务,任务提交上去之后获取不到ApplicationId,更无法跟踪spark application的任务 ...
- Spark2.x(五十九):yarn-cluster模式提交Spark任务,如何关闭client进程?
问题: 最近现场反馈采用yarn-cluster方式提交spark application后,在提交节点机上依然会存在一个yarn的client进程不关闭,又由于spark application都是 ...
- Yarn 容量调度器多队列提交案例
目录 Yarn 容量调度器多队列提交案例 需求 配置多队列的容量调度器 1 修改如下配置 SecureCRT的上传和下载 2 上传到集群并分发 3 重启Yarn或yarn rmadmin -refre ...
- idea或者java远程提交spark任务到yarn,Exception1
spark通過idea远程提交job到yarn: Caused by: java.lang.ClassCastException: cannot assign instance of scala.co ...
- spark on yarn任务提交缓慢解决
1.为什么要让运行时Jar可以从yarn端访问spark2以后,原有lib目录下的大JAR包被分散成多个小JAR包,原来的spark-assembly-*.jar已经不存在 每一次我们运行的时候,如果 ...
- 为CDH 5.7集群添加Kerberos身份验证及Sentry权限控制
转载请注明出处:http://www.cnblogs.com/xiaodf/ 4. 为CDH 5集群添加Kerberos身份验证 4.1 安装sentry1.点击“操作”,“添加服务”:2.选择sen ...
- spark-submit提交spark任务的具体参数配置说明
spark-submit提交spark任务的具体参数配置说明 1.spark提交任务常见的两种模式 2.提交任务时的几个重要参数 3.参数说明 3.1 executor_cores*num_execu ...
随机推荐
- MySQL复制(三) --- 高可用性和复制
实现高可用性的原则很简单: 冗余(Redundancy):如果一个组件出现故障,必须有一个备用组件.这个备用组件可以是standing by的,也可以是当前系统部署中的一部分. 应急计划(Contig ...
- 算法之合并排序(mergeSort)
合并排序算法在结构上是递归的,采用分治策略:就是将原有的问题划分为 n 个规模较小但结构与原问题相似的子问题,递归地解决这些子问题,然后合并其结果,就得到原问题的解. 合并排序的模式一般如下: 1.分 ...
- android xml产生和解析
public static void writeToXml(Map<String, Object> map,Writer writer) throws Exception, Illegal ...
- MIT 2012分布式课程基础源码解析一-源码概述
课程主页 课程介绍:本课程会在给出的源码的基础上要求完成8个lab Lab overviewLab 1 - Lock ServerLab 2 - Basic File ServerLab 3 - MK ...
- 【PHP ThinkPHP框架】小bug汇总[更新]
目录结构 1.函数调用 2.绑定select下拉框数据 3.PHP查询功能 4.格式化时间和价钱 5.IF标签比较两个变量 6.eq标签比较两个变量 7.新增信息或者修改信息的自动验证和自动填充 8. ...
- 阿里云服务器centos5.10安装lamp环境
==相关命令== 查看linux版本:cat /etc/redhat-release ==配置修改== 一.Apache配置 ------------------------------------- ...
- Codeforces Round #345 (Div. 1) A. Watchmen 模拟加点
Watchmen 题意:有n (1 ≤ n ≤ 200 000) 个点,问有多少个点的开平方距离与横纵坐标的绝对值之差的和相等: 即 = |xi - xj| + |yi - yj|.(|xi|, |y ...
- __sync_fetch_and_add
最近在公司离职的前辈写的代码哪里看到了__sync_fetch_and_add这个东东.比较好奇.找些资料学习学习 http://www.lxway.com/4091061956.htm http:/ ...
- 显示 EXCEL 的页签列表
如果你的EXCEL表有很多页签,反复点击左右箭头可能会很费时间. 不妨试试在 左箭头 或者 右箭头 上点击 右键,会有页签列表弹出.
- Nginx完整配置说明
http://blog.csdn.net/marising/article/details/3979493 可以参考如下的完整例子 http://wiki.codemongers.com/NginxF ...