Blog
hadoop-22 Yarn案例实操
创建系统快照
修改yarn-site.xml配置参数如下:
<!-- 选择调度器,默认容量调度器 -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
<!-- ResourceManager处理调度器请求的线程数量,默认50,本机3台 * 4线程=12线程,去除其他应用程序,实际不能超过8 -->
<property>
<name>yarn.resourcemanager.scheduler.client.thread-count</name>
<value>8</value>
</property>
<!-- 是否让yarn自动检测硬件进行设置,默认是false,如果该节点有很多其他应用程序,建议手动配置,没有则可以采用自动 -->
<property>
<name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
<value>false</value>
</property>
<!-- 是否将虚拟核数当做cpu核数,默认是false,采用物理CPU核数 -->
<property>
<name>yarn.nodemanager.resource.count-logical-processors-as-cores</name>
<value>false</value>
</property>
<!-- 虚拟核数和物理核数乘数,默认1.0 -->
<property>
<name>yarn.nodemanager.resource.pcores-vcores-multiplier</name>
<value>1.0</value>
</property>
<!-- NodeManager使用内存数,默认8G,修改为4G -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<!-- NodeManager的cpu的核数,默认8个,修改为2个 -->
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
</property>
<!-- 容器最小内存,默认1G -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<!-- 容器最大内存,默认8G,修改为2G -->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<!-- 容器最小cpu核数,默认1个 -->
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<!-- 容器最大cpu核数,默认4个,修改为2个-->
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>2</value>
</property>
<!-- 虚拟内存检测 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 虚拟内存和物理内存设置比例,默认2.1 -->
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
容量调度器多队列配置
按照框架:
- hive/spark/flink每个框架的任务放入指定的队列
按照业务模块
- 登录注册
- 购物车
- 下单等
需求:
- default队列占总内存的40%
- hive队列占总内存的60%
- hive队列最大资源容量设置为80%
配置多队列容量调度器:
- 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>
<property>
<name>yarn.scheduler.capacity.root.hive.capacity</name>
<value>60</value>
</property>
<!-- 向队列提交任务的时候,用户能占到总资源的多少 -->
<property>
<name>yarn.scheduler.capacity.root.hive.user-limit-factor</name>
<value>1</value>
</property>
<!-- 降低default队列资源最大容量为60%,默认100% -->
<property>
<name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
<value>60</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.hive.maximum-capacity</name>
<value>80</value>
</property>
<!-- 设置当前队列的状态:启动状态 -->
<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 -->
<property>
<name>yarn.scheduler.capacity.root.hive.maximum-application-lifetime</name>
<value>-1</value>
</property>
<!-- 如果没有执行超时时间,则使用该值 -->
<property>
<name>yarn.scheduler.capacity.root.hive.default-application-lifetime</name>
<value>-1</value>
</property>
- 分发配置文件
- 重启yarn或者执行yarn rmadmin -refreshQueues
- 提交任务指定队列名称
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount -Dmapreduce.job.queuename=hive /input /output3
java代码中指定提交队列名称
conf.set("mapreduce.job.queuename", "hive");
指定任务优先级
配置yarn-site.xml文件
<property>
<name>yarn.cluster.max-application-priority</name>
<value>5</value>
</property>
分发并重启yarn
sync yarn-site.xml
sbin/stop-yarn.xml
sbin/start-yarn.xml
- 提交任务指定优先级
- -D mapreduce.job.priority=5
- 也可以通过以下命令修改正在执行任务的优先级
- yarn application -appId -updatePriority 优先级
公平调度器
公平调度器的配置涉及两个文件
- yarn-site.xml
- fair-scheduler.xml
配置多队列的公平调度器yarn-site.xml
<!-- 配置使用公平调度器 -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<!-- 指明公平调度器队列分配配置文件 -->
<property>
<name>yarn.resourcemanager.fair.allocation.file</name>
<value>/opt/module/hadoop=3.1.3/etc/hadoop/fair-scheduler.xml</value>
</property>
<!-- 禁止队列间资源抢占 -->
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>false</value>
</property>
配置fair-scheduler.xml
<?xml version="1.0" ?>
<allocations>
<!-- 单个队列中Application Master占用资源的最大比例,取值0-1,企业一般配0.1 -->
<queueMaxAMShareDefault>0.5</queueMaxAMShareDefault>
<!-- 单个队列最大资源的默认值 test atguigu default -->
<queueMaxResourcesDefault>4096mb,4vcores</queueMaxResourcesDefault>
<!-- 增加一个队列 test -->
<queue name="test">
<!-- 队列最小资源 -->
<minResources>2048mb,2vcores</minResources>
<!-- 队列最大资源 -->
<maxResources>4096mb,4vcores</maxResources>
<!-- 队列中最多同时运行的应用数,默认50,根据实际线程数配置 -->
<maxRunningApps>4</maxRunningApps>
<!-- 队列中Application Master占用资源的最大比例 -->
<maxAMShare>0.5</maxAMShare>
<!-- 该队列资源权重,默认配置为1.0 -->
<weight>1.0</weight>
<!-- 队列内部的资源分配策略 -->
<schedulingPolicy>fair</schedulingPolicy>
</queue>
<queue name="atguigu" type="parent">
<!-- 队列最小资源 -->
<minResources>2048mb,2vcores</minResources>
<!-- 队列最大资源 -->
<maxResources>4096mb,4vcores</maxResources>
<!-- 队列中最多同时运行的应用数,默认50,根据实际线程数配置 -->
<maxRunningApps>4</maxRunningApps>
<!-- 队列中Application Master占用资源的最大比例 -->
<maxAMShare>0.5</maxAMShare>
<!-- 该队列资源权重,默认配置为1.0 -->
<weight>1.0</weight>
<!-- 队列内部的资源分配策略 -->
<schedulingPolicy>fair</schedulingPolicy>
</queue>
<!-- 任务队列分配策略,可配置多层规则,从第一个规则开始匹配,直到匹配成功 -->
<queuePlacementPolicy>
<!-- 提交任务时指定队列,如未指定提交队列,则继续匹配下一个规则,false表示,如果指定队列不存在,不允许自动创建 -->
<rule name="specified" create="false" />
<!-- root.group.username队列,若root.group不存在,不允许自动创建,若root.group.user不存在,允许自动创建 -->
<rule name="nestedUserQueue" create="true">
<rule name="primaryGroup" create="false" />
</rule>
<!-- 最后一个规则必须为reject或者default,reject表示拒绝创建提交失败,default表示把任务提交到default队列 -->
<rule name="reject">
</queuePlacementPolicy>
</allocations>
分发配置 重启yarn
xsync yarn-site.xml
xsync fair-scheduler.xml
sbin/stop-yarn.sh
sbin/start-yarn.sh
提交任务指定队列
-Dmapreduce.job.queuename=root.test
提交任务不指定队列,按照配置规则会提交到root.atguigu.atguigu队列