前言
Apache Hadoop YARN 是开源 Hadoop 分布式处理框架中的资源管理和作业调度技术。作为 Apache Hadoop 的核心组件之一,YARN 负责将系统资源分配给在 Hadoop 集群中运行的各种应用程序,并调度要在不同集群节点上执行的任务。
一、YARN CapacityScheduler调度器
简介
CapacityScheduler允许多租户安全地共享大型集群,以便在分配的容量限制下及时为其应用程序分配资源,同时最大化吞吐量和群集的利用率。
操作步骤
可到EMR控制台->左侧的【组件管理】找到yarn进行配置,在yarn的配置文件yarn-site.xml中开启Fair Scheduler。如下图1:
队列基本配置
CapacityScheduler的配置文件位于hadoop目录下的etc/hadoop/capacity-scheduler.xml。CapacityScheduler有一个名为root的预定义队列。系统中的所有队列都是root队列的子节点。
可以通过在yarn.scheduler.capacity.root.queues配置中,使用逗号分隔的子队列列表来设置更多队列。
下面是一个示例,其中包含三个顶级子队列a,b和c以及a和b的一些子队列:
二、yarn的WebUI使用
我们通过EMR控制台,左侧的【组件管理】进入Yarn的Web UI界面:
Application Queues参数说明
- Queue State:队列状态
- Used Capacity:该队列已使用的资源占该队列的百分比
- Absolute Used Capacity:该队列已使用资源占root队列的百分比
- Absolute Capacity:该队列默认分配的资源占root队列的百分比
- Absolute Max Capacity:该队列分配的资源最大可占父队列的百分比
- Used Resource:该队列使用的资源数量
- Num Schedulable Applications:该队列正在调度的应用数
- Num Non-Schedulable Applications:该队列没有在调度的应用数
- Num Containers:该队列已启动的容器数量
- Max Applications:最大可运行的应用数量(yarn.scheduler.capacity.maximum-applications * Absolute Capacity)
- Max Applications Per User:单个用户最大可运行的应用数量
- Max Schedulable Applications:集群最大可调度应用数量,取决于内存总量、应用最小内存分配、AM可用资源占比
- Max Schedulable Applications Per User:单个用户最大可调度应用数量。(Max Schedulable Applications * 该队列capacity占比 * 单用户可使用队列资源占比)
- Configured Capacity:该队列默认分配的资源占父队列的百分比
- Configured Max Capacity:该队列默认最大占父队列资源的百分比
- Configured Mininum User Limit Percent:单个用户最少可使用队列资源的百分比,最大值与用户数有关
- Configured User Limit Factor:每个User最多可以使用几个其他队列的资源
三、yarn操作的常用命令
背景
需要查看提交到yarn的应用作业情况
命令介绍
代码语言:javascript复制yarn application [options]
参数 | 说明 |
---|---|
-list | 打印RM上所有的应用信息。如果需要过滤出某个状态的应用,可以使用-appStates;使用-appTypes则可以过滤某个类型的应用 |
-appStates <States> | 打印RM上符合states的应用信息。 States 的取值范围为:ALL, NEW, NEW_SAVING, SUBMITTED, ACCEPTED, RUNNING, FINISHED, FAILED, KILLED |
-appTypes <Types> | 打印RM上符合Types的应用信息。 |
-status <ApplicationId> | 查看应用ID对应的应用情况 |
杀掉某个进程
代码语言:javascript复制yarn application -kill <ApplicationId>
说明:<ApplicationId> 可用 -list 查看到,或者登陆YARN快捷访问URL查看。
提交运行YARN应用
提交运行一个YARN的应用jar包。用户可以将写好的YARN代码打包成jar文件,用这个命令去运行它
代码语言:javascript复制yarn jar <jar> [mainClass] args...
参数 | 说明 |
---|---|
<jar> | 对应的jar包 |
mainClass | jar包mian函数入口的class类名 |
args... | 运行需要传入的参数 |
查看应用的日志
命令介绍
代码语言:javascript复制yarn logs -applicationId <application ID> [options]
参数 | 说明 |
---|---|
-applicationId <application ID> | 指定应用程序ID,可用 -list 查看到,或者登陆YARN快捷访问URL查看。 |
-appOwner <AppOwner> | 应用的所有者(如果没有指定就是当前用户)应用程序的ID可以在yarn.resourcemanager.webapp.address配置的路径查看(即:User) |
-containerId <ContainerId> | containerId, 如果指定了containerId,则必须连nodeAddress一起指定 |
-nodeAddress <NodeAddress> | 节点地址的格式:nodename:port, 如果指定了nodeAddress,则必须连containerId一起指定 |
查看node信息
命令介绍
代码语言:javascript复制yarn node [options]
参数 | 说明 |
---|---|
-all | 所有的节点,不管是什么状态的。 |
-list | 列出所有RUNNING状态的节点。支持-states选项过滤指定的状态,节点的状态包 含:NEW,RUNNING,UNHEALTHY,DECOMMISSIONED,LOST,REBOOTED。支持--all显示所有的节点。 |
-states <States> | 和-list配合使用,用逗号分隔节点状态,只显示这些状态的节点信息。 |
-status <NodeId> | 打印指定节点的状态。 |
查看YARN container信息
命令介绍
代码语言:javascript复制yarn container [options]
参数 | 说明 |
---|---|
-list <Application Attempt Id> | 应用程序尝试的Containers列表 |
-status <ContainerId> | 打印Container的状态 |
查看YARN版本
代码语言:javascript复制yarn version