Yarn的详细使用

Yarn

1、常用命令

查看任务(yarn application)

  • 列出所有 Application
    • yarn application -list
  • 根据 Application 状态过滤(所有状态:ALL、NEW、 NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED)
    • yarn application -list -appStates <状态(ALL/RUNNING/FINISHED/...)>
  • Kill 掉 Application
    • yarn application -kill <ApplicationId>



查看日志(yarn logs)

  • 查询 Application 日志
    • yarn logs -applicationId <ApplicationId>
  • 查询 Container 日志
    • yarn logs -applicationId <ApplicationId> -containerId <ContainerId>



查看尝试运行的任务(yarn applicationattempt)

  • 列出所有 Application 尝试的列表
    • yarn applicationattempt -list <ApplicationId>
  • 打印 ApplicationAttemp 状态
    • yarn applicationattempt -status <ApplicationAttemptId>



查看容器(yarn container)

  • 列出所有 Container
    • yarn container -list <ApplicationAttemptId>
  • 打印 Container 状态
    • yarn container -status <ContainerId>



查看节点状态(yarn node)

  • 列出所有节点
    • yarn node -list -all



查看队列(yarn queue)

  • 打印队列信息
    • yarn queue -status <QueueName>




2、生产环境核心参数

参数解释
yarn.resourcemanager.scheduler.class配置调度器,默认容量
yarn.resourcemanager.scheduler.client.thread-countResourceManager处理调度器请求的线程数量,默认50
yarn.nodemanager.resource.detect-hardware-capabilities是否让yarn自己检测硬件进行配置,默认false
yarn.nodemanager.resource.count-logical-processors-as-cores是否将虚拟核数当作CPU核数,默认false
yarn.nodemanager.resource.pcores-vcores-multiplier虚拟核数和物理核数乘数,例如:4核8线程,
该参数就应设为2,默认1.0
yarn.nodemanager.resource.memory-mbNodeManager使用内存,默认8G
yarn.nodemanager.resource.cpu-vcoresNodeManager使用CPU核数,默认8个
yarn.nodemanager.pmem-check-enabled是否开启物理内存检查限制container,默认打开
yarn.nodemanager.vmem-check-enabled是否开启虚拟内存检查限制container,默认打开
yarn.nodemanager.vmem-pmem-ratio虚拟内存物理内存比例,默认2.1
yarn.scheduler.minimum-allocation-mb容器最最小内存,默认1G
yarn.scheduler.maximum-allocation-mb容器最最大内存,默认8G
yarn.scheduler.minimum-allocation-vcores容器最小CPU核数,默认1个
yarn.scheduler.maximum-allocation-vcores容器最大CPU核数,默认4个




3、Yarn 案例实操

Yarn 生产环境核心参数配置案例

  • 需求:从 1G 数据中,统计每个单词出现次数。服务器 3 台,每台配置 4G 内存,4 核 CPU,4 线程。

  • 需求分析

    • 1G / 128m = 8 个 MapTask;1 个 ReduceTask;1 个 mrAppMaster
    • 平均每个节点运行 10 个 / 3 台 ≈ 3 个任务(4 3 3)
  • 修改 yarn-site.xml 配置文件参数

        <!-- 选择调度器,默认容量 -->
        <property>
            <name>yarn.resourcemanager.scheduler.class</name>
            <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
        </property>
        <!-- ResourceManager 处理调度器请求的线程数量,默认 50;如果提交的任务数大于 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 个,修改为 4 个 -->
        <property>
            <name>yarn.nodemanager.resource.cpu-vcores</name>
            <value>4</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>
    




容量调度器多队列提交案例

  • 需求:default队列占总内存的40%,最大资源占总资源60%,hive队列占总内存的60%,最大资源占总资源 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>
        <!-- 降低 default 队列资源最大容量为 60%,默认 100% -->
        <property>
            <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
            <value>60</value>
        </property>
    
  • 为新加队列添加必要属性(capacity-scheduler.xml)

        <!-- 指定 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>
        <!-- 如果 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>
    



公平调度器案例

  • 需求:创建两个队列,分别是 test 和 root。期望实现以下效果:若用户提交任务时指定队列,则任务提交到指定队列运行;若未指定队列,test 用户提交的任务到 root.group.test 队列运行,root 提交的任务到 root.group.root 队列运行
  • 公平调度器的配置涉及到两个文件
    • 一个是 yarn-site.xml,另一个是公平调度器队列分配文件 fair-scheduler.xml(文件名可自定义)。
    • 配置文件参考资料:
      • https://hadoop.apache.org/docs/r3.1.3/hadoop-yarn/hadoop-yarn-site/FairScheduler.html
    • 任务队列放置规则参考资料:
      • https://blog.cloudera.com/untangling-apache-hadoop-yarn-part-4-fair-scheduler-queue-basics/

修改 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.scheduler.fair.allocation.file</name>
        <value>/opt/software/hadoop/hadoop-3.1.4/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>
    <!-- 增加一个队列 test2 (队列名字自定义)-->
    <queue name="test2" 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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值