容量调度器多队列提交案例
1. 需求
1: default 队列占总内存的 40%,最大资源容量占总资源 60%,hive 队列占总内存
的 60%,最大资源容量占总资源 80%
2: 配置队列优先级
2.配置多队列的容量调度器
- 在
capacity-scheduler.xml
中配置如下:- 修改如下配置:
<!-- 指定多队列,增加 hive 队列 --> <property> <name>yarn.scheduler.capacity.root.queues</name> <value>default,hive</value> </property> <!-- 降低 default 队列资源额定容量为 40%,默认 100% --> <property> <name>yarn.scheduler.capacity.root.default.capacity</name> <value>40</value> </property> <!-- 降低 default 队列资源最大容量为 60%,默认 100% --> <property> <name>yarn.scheduler.capacity.root.default.maximum-capacity</name> <value>60</value> </property>
- 为新加队列添加必要属性
<!-- 指定 hive 队列的资源额定容量 --> <property> <name>yarn.scheduler.capacity.root.hive.capacity</name> <value>60</value> </property> <!-- 用户最多可以使用队列多少资源,1 表示 --> <property> <name>yarn.scheduler.capacity.root.hive.user-limit-factor</name> <value>1</value> </property> <!-- 指定 hive 队列的资源最大容量 --> <property> <name>yarn.scheduler.capacity.root.hive.maximum-capacity</name> <value>80</value> </property> <!-- 启动 hive 队列 --> <property> <name>yarn.scheduler.capacity.root.hive.state</name> <value>RUNNING</value> </property> <!-- 哪些用户有权向队列提交作业 --> <property> <name>yarn.scheduler.capacity.root.hive.acl_submit_applications</name> <value>*</value> </property> <!-- 哪些用户有权操作队列,管理员权限(查看/杀死) --> <property> <name>yarn.scheduler.capacity.root.hive.acl_administer_queue</name> <value>*</value> </property> <!-- 哪些用户有权配置提交任务优先级 --> <property> <name>yarn.scheduler.capacity.root.hive.acl_application_max_priority</name> <value>*</value> </property> <!-- 任务的超时时间设置:yarn application -appId appId -updateLifetime Timeout 参考资料: https://blog.cloudera.com/enforcing-application-lifetime-slasyarn/ --> <!-- 如果 application 指定了超时时间,则提交到该队列的 application 能够指定的最大超时 时间不能超过该值。 --> <property> <name>yarn.scheduler.capacity.root.hive.maximum-applicationlifetime</name> <value>-1</value> </property> <!-- 如果 application 没指定超时时间,则用 default-application-lifetime 作为默认 值 --> <property> <name>yarn.scheduler.capacity.root.hive.default-applicationlifetime</name> <value>-1</value> </property>
- 分发配置文件
- 重启
Yarn
或者执行yarn rmadmin -refreshQueues
刷新队列,就可以看到两条队列 - 向hive队列提交任务
hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount -D
mapreduce.job.queuename=hive /input /output
3.任务优先级
- 修改
yarn-site.xml
文件,增加以下参数<property> <name>yarn.cluster.max-application-priority</name> <value>5</value> </property>
- 分发配置,并重启
Yarn
- 模拟资源紧张环境,可连续提交以下任务,直到新提交的任务申请不到资源为止。
hadoop jar /opt/module/hadoop3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 5 2000000
- 再次重新提交优先级高的任务
hadoop jar /opt/module/hadoop3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi -D mapreduce.job.priority=5 5 2000000
优先级高的会先分配资源,但是如果有低优先级的已经分配了资源,优先级高的不会抢其资源