Hadoop-yarn学习

一、常用命令

1.yarn application -list列出所有Application

2.yarn application -list -appStates 状态(ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING,FINISHED,FAILED,KILLED)根据Application状态过滤

3.yarn application -kill 进程ID杀死某个进程

4.yarn logs -applicationId 进程id查看进程日志

5.yarn logs -applicationId 进程id -containerId 容器id查看容器id

6.yarn applicationattempt -list 进程id列出所有Application尝试的列表

7.yarn applicationattempt -status 进程id打印ApplicationAttemp状态

8.yarn container -list 进程id列出所有Container

9.yarn container -status 容器id打印Container状态

10.yarn node -list -all列出所有节点

11.yarn rmadmin -refreshQueues加载队列配置

12.yarn queue -status 队列名称打印队列信息

二、队列相关命令

1.配置多队列的容量调度器

(1)在capacity-scheduler.xml中配置如下:
修改配置:
<!-- 指定多队列,增加hive队列 -->
<property>
    <name>yarn.scheduler.capacity.root.queues</name>
    <value>default,hive</value>
    <description>
      The queues at the this level (root is the root queue).
    </description>
</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-slas-yarn/ -->

<!-- 如果application指定了超时时间,则提交到该队列的application能够指定的最大超时时间不能超过该值。 
-->
<property>
    <name>yarn.scheduler.capacity.root.hive.maximum-application-lifetime</name>
    <value>-1</value>
</property>

<!-- 如果application没指定超时时间,则用default-application-lifetime作为默认值 -->
<property>
    <name>yarn.scheduler.capacity.root.hive.default-application-lifetime</name>
    <value>-1</value>
</property>
(2)分发配置文件
(3)重启Yarn或者执行yarn rmadmin -refreshQueues刷新队列

2.向hive队列提交任务hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar wordcount -D mapreduce.job.queuename=hive /input /output,其中-D表示运行时改变参数值

3.任务优先级

(1)修改yarn-site.xml文件,增加以下参数(其中value值随便自己设):
<property>
    <name>yarn.cluster.max-application-priority</name>
    <value>5</value>
</property>
(2)分发配置,并重启yarn
(3)设置任务优先级hadoop jar /opt/module/hadoop-3.2.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar pi -D mapreduce.job.priority=5 5 2000000
(4)修改正在执行的任务的优先级yarn application -appID 进程id -updatePriority 优先级

4.配置多队列的公平调度器

(1)修改yarn-site.xml文件,加入以下参数:
<property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
    <description>配置使用公平调度器</description>
</property>

<property>
    <name>yarn.scheduler.fair.allocation.file</name>
    <value>/opt/module/hadoop-3.2.4/etc/hadoop/fair-scheduler.xml</value>
    <description>指明公平调度器队列分配配置文件</description>
</property>

<property>
    <name>yarn.scheduler.fair.preemption</name>
    <value>false</value>
    <description>禁止队列间资源抢占</description>
</property>
(2)配置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>
  <!-- 增加一个队列atguigu -->
  <queue name="atguigu">
    <!-- 队列最小资源 -->
    <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>
(3)分发配置并重启Yarn

4.测试提交任务

(1)任务指定到root.test队列hadoop jar /opt/module/hadoop-3.2.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar pi -Dmapreduce.job.queuename=root.test 1 1
(2)不指定队列则按照配置规则选队列hadoop jar /opt/module/hadoop-3.2.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar pi 1 1

5.创建tool接口后,可以使用yarn jar Yarn.jar com.lzp.yarn.WordCountDriver wordcount -Dmapreduce.job.queuename=root.test /input2 /output执行程序

三、总结

1.Yarn的工作机制(面试题)

2.Yarn的调度器

(1)FIFO/容量/公平
(2)apache默认调度器:容量;CDH默认调度器:公平
(3)公平/容量默认一个default,需要创建多队列
(5)中大企业:业务模块:登录/注册/购物车/营销
(6)好处:解耦 降低风险 11.11 6.18 降级使用
(7)每个调度器特点:
  相同点:支持多队列,可以借资源,支持多用户
  不同点:容量调度器:优先满足先进来的任务先执行
      公平调度器:在队列里面的任务公平享有队列资源
(8)生产环境怎么选:
  中小企业:对并发度要求不高,选择容量
  中大企业:对并发度要求比较高,选择公平

3.并发需要重点掌握:

(1)队列运行原理
(2)Yarn常用命令
(3)核心参数配置
(4)配置容量调度器和公平调度器
(5)tool接口使用

posted on 2022-09-01 00:03  L先森请坐下  阅读(208)  评论(0编辑  收藏  举报

导航