Yarn_容量调度器队列案例---大数据之hadoop3.x工作笔记0152




然后我们再来看,可以看到default队列


我们要陪着,他占用总内存的百分之40,然后最大资源容量占用总资源的百分之60,


然后我们再添加一个队列,hive队列,然后让这个hive队列占用总内存的百分之60,然后


最大资源容量占用总资源的百分之80



然后我们去看一下后台


这个scheduler中可以看到有个default队列,展开在换个队列,可以看到,现在他占用了


absolute configured capacity 可以看到是 100%


这说明占用的内存是百分之百现在对吧.



然后我们去修改配置



修改这个:



/opt/module/hadoop-3.1.3/etc/hadoop 这个文件夹下面的


capacity-scheduler.xml 这个配置文件.



这个配置文件直接在Linux系统修改很麻烦,我们下载下来修改


sz capacity-scheduler.xml



下载下来以后打开,我们找到上面这个



yarn.scheduler.capacity.root.queues 可以看到默认只有default,我们再添加一个hive队列



然后我们再去修改,可以看到
yarn.scheduler.capacity.root.default.capacity 默认是占用总内存的百分之100,


这里我们改成40,根据我们的需求



然后我们再去,



yarn.scheduler.capacity.root.hive.capacity 设置成60,根据需求,我们给hive这个队列


设置占用总内存资源的百分之60



然后我们再去看
yarn.scheduler.capacity.root.default.user-limit-factor这个参数,可以看到这个


这个设置的就是,我们知道default这个队列,默认占用整个内存的百分之40,那么如果这里设置成1,


就是说他可以占用到百分之40,那么如果这里设置成0.5,他就能占用到百分之20这样.


这里我们,default队列和hive队列,都设置成1 就可以



然后我们再去看,
yarn.scheduler.capacity.root.default.maximum-capacity 这个是最大占用的资源,是总内存的百分之60,


然后根据需求我们再去copy一份配置,设置hive最大占用资源是总内存的,百分之80



然后我们再去看
yarn.scheduler.capacity.root.default.state这个是,设置队列的运行状态,这里一定要注意设置成


RUNNING这样队列才能起作用,我们copy一份,设置hive队列的状态也是RUNNING



然后
yarn.scheduler.capacity.root.dufault.acl_submit_applications 这个,可以看到是*


这个意思是允许哪个用户提交任务,这里默认是*,就是所有用户都可以提交任务



如果你想让比如atguigu 只能这个用户提交任务,可以看到可以设置成atguigu



然后这里我们给,default队列和hive队列都设置成 *,表示所有用户都可以往这两个队列中提交任务



然后我们再看这个
yarn.scheduler.capacity.root.default.acl_administer_queue这个配置


是说,哪些用户可以对这个队列操作,比如查看,删除,等操作.


这里我们给default,和hive队列都配置上,* 任何用户都可以查看,删除这两个队列



然后我们再来看这个
yarn.scheduler.capacity.root.hive.acl_application_max_priority这个是设置队列优先级的


就是说允许哪些用户可以设置队列优先级,这里我们,default和hive队列都设置成* 就可以


允许所有用户可以设置优先级



然后我们再去看一下这个



yarn.scheduler.capacity.root.default.maximum-application-lifetime 可以看到值是-1


这个我们先不解释,我们先配置好


可以看到
yarn.scheduler.capacity.root.hive.maximum-application-lifetime 再去设置hive的



然后我们再去看另一个配置跟上面那个很像,


yarn.scheduler.capacity.root.default.default-application-lifetime



然后我们再去设置
yarn.scheduler.capacity.root.hive.default-application-lifetime 设置这个hive的参数



然后再往下的话,可以看到,就是对整个容量调度器的配置了,就不是对某个具体的队列设置的了,


我们就可以不管了.



然后我们首先去看一下


yarn application -appId appId -updateLifetime Timeout 可以看到这个就是用来指定


某个应用,也就是任务,执行的时间的,如果我这里设置20分钟,那么这个应用执行到20分钟以后,即使没有执行完成


也会被立刻杀死.


如果这个配置我没有设置呢?



然后我们再去看,如果上面的那个配置没有设置的话,他就会按照,这个默认的超时时间控制



yarn.scheduler.capacity.root.hive.default-application-lifetime这个参数.


比如如果,上面的命令没有配置,这里设置了默认的超时时间是-1,那么就是没有限制,


一直执行不会超时,如果上面的命令没有设置,但是这里设置了比如是5分钟,那么


等任务执行5分钟以后,就会被强制杀掉.



然后再去看
yarn.scheduler.capacity.root.hive.maximum-application-lifetime 这里


可以看到,这个最大值,意思就是,比如这里如果设置了2天,那么,即使,上面用命令设置了


某个任务的超时时间是3天,那么到2天的时候,也会自动被杀掉,如果设置了是1天的话,


那么到1天的时候会被杀掉,如果命令没有设置,并且,默认超时时间,设置了-1的话,那么


就是没有超时限制,这个时候,因为设置了,最大超时时间是2天,所以到2天的时候,这个任务还是


会被杀掉.



我们在本地配置好了以后,然后删除掉,服务器上的这个配置文件


rm -rf capactiy-scheduler.xml



删除以后把我们配置好的文件上传上去



然后我们上传以后再去看一下,确认一下,是否是我们修改过的文件


vim capacity-scheduler.xml



看看内容,可以看到有hive是,我们最新修改的



然后我们把修改后的文件分发到其他服务器


xsync capacity-scheduler.xml



分发以后,我们执行JPS 去看看节点都是启动状态对吧



可以看到那怎么,让我们对队列的修改生效呢?


有两个办法,可以 重启yarn,或者 执行yarn rmadmin -refreshQueues 刷新队列 就可以了.



刷新以前我们先去web端去看看,可以看到有队列了default,还是有这一个



然后我们执行 yarn rmadmin -refreshQueues 这里刷新队列



然后再去看,可以看到


就变成2个队列了,一个hive,我们刚添加的,一个default,默认的那个



我们先打开hive这个队列,可以看到,容量配置,就是对应的百分之60,80对吧我们上面设置的



然后再去看一下default那个队列,可以看到


对应的也是40,60了,也是我们上面配置的对吧



然后我们再去执行一个任务,我们在hive这个队列中去执行


opt/module/hadoop-3.1.3 这个文件夹 走到这个文件夹


然后



hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount -D mapreduce.job.queuename= hive /input /ouput5


可以看到这里我们就指定了wordcount这个程序在,hive这个队列中执行



执行以后可以在web端看到,可以看到hive队列中就已经在运行了,可以看到占用的资源是27.5对吧.



继续执行,等他执行完



然后再去看一下applications这里,可以看到hive和default这两个队列也能清楚看到



然后再说一下,如果在命令中,我们不指定,某个应用程序在,哪个队列中运行的话


也可以conf.set("mapreduce.job.queuename","hive") 在代码中,写驱动器的时候指定,这样指定以后


这个程序执行的时候,就会自动的在hive,这个队列中执行了.

原文链接:,转发请注明来源!