文章目录
- Yarn 容量调度器并发度问题演示
- 增加 ApplicationMaster 资源比例
- 配置 Yarn 容量调度器多队列
- 1)增加容量调度器队列
- 2)测试新队列
Yarn 容量调度器并发度问题演示
Yarn 默认调度器为 Capacity Scheduler(容量调度器),且默认只有一个队列——default。如果队列中执行第一个任务资源不够,就不会再执行第二个任务,一直等到第一个任务执行完毕。
(1)启动 1 个 hive 客户端,执行以下插入数据的 sql 语句。
hive (default)> insert into table student values(1,'abc');
执行该语句,由于未指定队列,故该会话默认使用的就是 default 队列,且会一直占用该队列,直到退出 hive客户端。
可访问 ResourceManager 的 web 页面查看相关信息。
(2)在 hive 客户端开启的状态下,提交一个 MR。
[atguigu@hadoop102 ~]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 1 1
MR 任务同样未指定队列,所以其默认也提交到了 default 队列
任务提交界面如下:
ResourceManager 的 web 页面如下:
(3)引入一个问题,当容量调度器 default 队列中,同一时间只有一个任务执行,此时并发度低,该如何解决呢?
增加 ApplicationMaster 资源比例
针对容量调度器并发度低的问题,考虑调整 yarn.scheduler.capacity.maximum-amresource-percent 该参数。默认值是 0.1,表示集群上 AM 最多可使用的资源比例,目的为限制过多的 app 数量。
(1)在 hadoop102 的/opt/module/hadoop-3.1.3/etc/Hadoop/capacity-scheduler.xml 文件中
修改如下参数值
[atguigu@hadoop102 hadoop]$ vim capacity-scheduler.xml
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>0.5</value>
<description>
集群中用于运行应用程序 ApplicationMaster 的资源比例上限,
该参数通常用于限制处于活动状态的应用程序数目。该参数类型为浮点型,
默认是 0.1,表示 10%。所有队列的 ApplicationMaster 资源比例上限可通过参数
yarn.scheduler.capacity.maximum-am-resource-percent 设置,而单个队
列 可 通 过 参 数 yarn.scheduler.capacity.<queue-path>.maximum-amresource-percent 设置适合自己的值。
</description>
</property>
(2)分发 capacity-scheduler.xml 配置文件
[atguigu@hadoop102 hadoop]$ xsync capacity-scheduler.xml
(3)关闭正在运行的任务,重新启动 yarn 集群
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
配置 Yarn 容量调度器多队列
在企业里面如何配置多队列:
按照计算引擎创建队列 hive、spark、flink
按照业务创建队列:下单、支付、点赞、评论、收藏(用户、活动、优惠相关)
多队列有什么好处?
假如公司来了一个菜鸟,写了一个递归死循环,公司集群资源耗尽,大数据全部瘫痪。
可以使用队列统一管理任务优先级,保证重要的任务优先完成。
1)增加容量调度器队列
(1)修改容量调度器配置文件
默认 Yarn 的配置下,容量调度器只有一条 default 队列。在 capacity-scheduler.xml 中可以配置多条队列,修改以下属性,增加 hive 队列
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,hive</value>
<description>
再增加一个 hive 队列
</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>50</value>
<description>
default 队列的容量为 50%
</description>
</property>
同时为新加队列添加必要属性:
<property>
<name>yarn.scheduler.capacity.root.hive.capacity</name>
<value>50</value>
<description>
hive 队列的容量为 50%
</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.hive.user-limit-factor</name>
<value>1</value>
<description>
一个用户最多能够获取该队列资源容量的比例,取值 0-1
</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.hive.maximum-capacity</name>
<value>80</value>
<description>
hive 队列的最大容量(自己队列资源不够,可以使用其他队列资源上限)
</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.hive.state</name>
<value>RUNNING</value>
<description>
开启 hive 队列运行,不设置队列不能使用
</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.hive.acl_submit_applications</name>
<value>*</value>
<description>
访问控制,控制谁可以将任务提交到该队列,*表示任何人
</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.hive.acl_administer_queue</name>
<value>*</value>
<description>
访问控制,控制谁可以管理(包括提交和取消)该队列的任务,*表示任何人
</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.hive.acl_application_max_priority</name>
<value>*</value>
<description>
指定哪个用户可以提交配置任务优先级
</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.hive.maximum-applicationlifetime</name>
<value>-1</value>
<description>
hive 队列中任务的最大生命时长,以秒为单位。任何小于或等于零的值将被视为禁用。
</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.hive.default-applicationlifetime</name>
<value>-1</value>
<description>
hive 队列中任务的默认生命时长,以秒为单位。任何小于或等于零的值将被视为禁用。
</description>
</property>
(2)分发配置文件
[atguigu@hadoop102 ~]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/capacity-scheduler.xml
(3)重启 Hadoop 集群
2)测试新队列
(1)提交一个 MR 任务,并指定队列为 hive
[atguigu@hadoop102 ~]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi
-Dmapreduce.job.queuename=hive 1 1
(2)查看 ResourceManager 的 web 页面,观察任务被提交到的队列