CDH Yarn资源队列划分管理

CDH Yarn资源队列划分管理

场景:根据不同项目或不同用户,对yarn资源队列进行划分,达到资源管控,任务管控的目的
CDH版本:5.11.0

配置:
1、 yarn资源队列参数设置:
(1) yarn.scheduler.fair.user-as-default-queue false
CDH Yarn资源队列划分管理_第1张图片

根据图中中文解释可知,这个参数设置为false后,没有创建资源队列的用户,提交任务时,任务最重提交到默认队列(如果勾了这个,切没有创建对应用户名的资源池,任务直接提交失败)
(2) yarn.scheduler.fair.allow-undeclared-pools false
CDH Yarn资源队列划分管理_第2张图片
根据图中中文解释可知,如果设置为ture,应用程序在执行时会创建权重为1的对应用户名的资源池,这样起不到资源管控的效果,所以这里我们要设置为false

2、 CDH 动态资源队列配置入口
CDH Yarn资源队列划分管理_第3张图片
3、 根据用户的资源队列管理
CDH Yarn资源队列划分管理_第4张图片
如图,第一步我们划分了3个资源池:
(1) default:默认池,没有划分资源池的用户会提交到default资源池
CDH Yarn资源队列划分管理_第5张图片
a 这里权重为1,与root、tracy资源成1:4:1,占yarn总资源的16.7%(CPU、Memory各占16.7%)
b 这里不要设置为父池,一定要保证为叶子节点即子池,不然提交不了任务
CDH Yarn资源队列划分管理_第6张图片

c 计划策略这里我采用的都是DRF,后续讲区别
CDH Yarn资源队列划分管理_第7张图片
d 提交访问控制:配置用户权限,配置哪些用户有权限提交任务,注意用逗号分隔
CDH Yarn资源队列划分管理_第8张图片
e 管理访问控制:配置用户对资源池的管理权限,注意用逗号分开
(2) tracy池:特定tracy用户提交任务到该池
tracy池配置跟default基本一样,唯一区别是权限控制所对应用户有所调整:
CDH Yarn资源队列划分管理_第9张图片
a 提交访问控制和管理访问控制都只有特定用户tracy有权限
b root池跟tracy池一样,都只是权限控制上的调整,root池的权限只属于root
(3) 放置规则
CDH Yarn资源队列划分管理_第10张图片
放置规则即任务提交后分配资源池的规则,分配规则时会按放置规则的顺序去1、2、3逐个匹配,匹配成果即按成功规则分配资源池,如果前两条都没有匹配成功,则会自动执行最后一条,分配到root.default队列
1 仅当池 已在运行时指定 存在时使用该池。
即我们在提交任务时设置了队列,这样会自动把任务分配到设置的队列(前提是设置的队列对提交用户开通了权限,不然设置了队列,会提交失败)
hive:set mapred.job.queue.name=root.tracy;
sqoop:-D mapred.job.queue.name= root.tracy;
spark: –queue root.tracy
mapreduce:-Dmapred.job.queue.name=root.tracy
2 仅当池 root.[username] 存在时使用该池。
即判断当前提交任务的用户是否拥有自己名字命名的队列,不如说tracy提交的任务会匹配上root.tracy
3 使用池 root.default。 此规则始终满足。不会使用后续规则。
即如果前两条规则都没有匹配上,会自动将任务提交到root.default队列
(4) 测试
a 用nexttao的用户在不设置队列的情况下,提交一个maprduce任务:
hadoop jar hadoop-examples.jar wordcount -Dmapred.reduce.tasks=1 hdfs:// Spark-Test-1:8020/test/input hdfs://zt01:8020/test/output
这里写图片描述
这里由于没有名字为root.nexttao的队列,规则1、2都没有匹配上,随意提交到了root.default队列
b 用nexttao的用户设置任务队列为root.tracy后提交一个mapreduce任务:
hadoop jar hadoop-examples.jar wordcount -Dmapred.reduce.tasks=1 -Dmapred.job.queue.name=root.tracy hdfs://Spark-Test-1:8020/test/input hdfs://Spark-Test-1:8020/test/output
这里写图片描述
这里在设置了队列后,走了规则1,如图
c 用tracy用户不设置队列的情况下提交一个mapreduce任务
hadoop jar hadoop-examples.jar wordcount -Dmapred.reduce.tasks=1 hdfs://Spark-Test-1:8020/test/input hdfs://Spark-Test-1:8020/test/output
这里写图片描述
这里走了规则2,直接提交到了自己用户名下的队列
(5) 根据用户划分资源队列总结
根据用户划分资源队列按上边的流程基本没什么问题,如果集群是一个项目在用,根据用户划分感觉没什么问题,方便并且好管理,谁什么时间提交了什么任务都是能跟踪到的,并且每个人有多少资源可以使用也很好管控,不存在用户之间争抢资源情况
4、 总结
其实有的生产集群可能存在多项目共用的情况,可以一个项目一个大的用户,互不干扰

你可能感兴趣的:(cdh,yarn)