yarn
Apache Hadoop YARN
(
Yet Another Resource Negotiator
,另一种资源协调者)是一种新的
Hadoop
资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
YARN
的基本思想
将JobTracker
的两个主要功能(资源管理和作业调度
/
监控)分离,主要方法是创建一个全局的
ResourceManager
(
RM
)和若干个针对应用程序的
ApplicationMaster
(
AM
)。这里的应用程序是指传统的
MapReduce
作业或作业的
DAG
(有向无环图)。
YARN的核心思想
将JobTracker
和
TaskTacker
进行分离,它由下面几大构成组件:
a.
一个全局的资源管理器
ResourceManager
b.ResourceManager的每个节点代理
NodeManager
c.
表示每个应用的
ApplicationMaster
d.
每一个
ApplicationMaster
拥有多个
Container
在NodeManager
上运行
[2]
2
YARN的主要架构
ResourceManager(RM)
RM
是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(
Scheduler
)和应用程序管理器(
Applications Manager
,
AM
)。
调度器 调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。需要注意的是,该调度器是一个“
纯调度器
”
,它不再从事任何与具体应用程序相关的工作,比如不负责监控或者跟踪应用的执行状态等,也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务,这些均交由应用程序相关的
ApplicationMaster
完成。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念
“
资源容器
”
(
Resource Container
,简称
Container
)表示,
Container
是一个动态资源分配单位,它将内存、
CPU
、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。
此外,该调度器是一个可插拔的组件,用户可根据自己的需要设计新的调度器,YARN
提供了多种直接可用的调度器,比如
Fair Scheduler
和
Capacity Scheduler
等。
应用程序管理器应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster
、监控
ApplicationMaster
运行状态并在失败时重新启动它等。
[2]
ApplicationMaster(AM)
用户提交的每个应用程序均包含一个AM
,主要功能包括:
与RM
调度器协商以获取资源(用
Container
表示)
;
将得到的任务进一步分配给内部的任务(
资源的二次分配
)
;
与NM
通信以启动
/
停止任务
;
监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
当前YARN
自带了两个
AM
实现,一个是用于演示
AM
编写方法的实例程序
distributedshell
,它可以申请一定数目的
Container
以并行运行一个
Shell
命令或者
Shell
脚本;另一个是运行
MapReduce
应用程序的
AM—MRAppMaster
。
注:RM
只负责监控
AM
,在
AM
运行失败时候启动它,
RM
并不负责
AM
内部任务的容错,这由
AM
来完成。
[2]
NodeManager(NM)
NM
是每个节点上的资源和任务管理器
,一方面,它会定时地向RM
汇报本节点上的资源使用情况和各个
Container
的运行状态;另一方面,它接收并处理来自
AM
的
Container
启动
/
停止等各种请求。
[2]
Container
Container
是
YARN
中的资源抽象,它封装了某个节点上的多维度资源,如内存、
CPU
、磁盘、网络等,当
AM
向
RM
申请资源时,
RM
为
AM
返回的资源便是用
Container
表示。
YARN
会为每个任务分配一个
Container
,且该任务只能使用该
Container
中描述的资源。
注:1. Container
不同于
MRv1
中的
slot
,它是一个动态资源划分单位,是根据应用程序的需求动态生成的。
2.
现在
YARN
仅支持
CPU
和内存两种资源,且使用了轻量级资源隔离机制
Cgroups
进行资源隔离。
YARN
的资源管理和执行框架都是按主
/
从范例实现的
——Slave ---
节点管理器(
NM
)运行、监控每个节点,并向集群的
Master---
资源管理器
(RM)
报告资源的可用性状态,资源管理器最终为系统里所有应用分配资源。
特定应用的执行由ApplicationMaster
控制,
ApplicationMaster
负责将一个应用分割成多个任务,并和资源管理器协调执行所需的资源,资源一旦分配好,
ApplicationMaster
就和节点管理器一起安排、执行、监控独立的应用任务。
需要说明的是, YARN
不同服务组件的通信方式采用了事件驱动的异步并发机制,这样可以简化系统的设计。
Yarn
命令
在HADOOP_HOME/bin
目录下,查看
yarn
帮助:
>yarn -help
Usage:
yarn
[--config confdir]
COMMAND
where COMMAND is one of:
resourcemanager -format-state-store deletes the RMStateStore
resourcemanager run the ResourceManager
nodemanager run a nodemanager on each slave
timelineserver run the timeline server
rmadmin admin tools
version print the version
jar <jar> run a jar file
application
prints application(s)
report/kill application
applicationattempt prints applicationattempt(s)
report
container prints container(s) report
node prints node report(s)
queue prints queue information
logs dump container logs
classpath prints the class path needed to
get the Hadoop jar and the
required libraries
daemonlog get/set the log level for each
daemon
or
CLASSNAME run the class named CLASSNAME
Most commands print help when invoked w/o parameters.
继续查看yarn application
的帮助:
yarn application -help
usage: application
-appStates <States> Works with -list to filter applications
based on input comma-separated list of
application states. The valid application
state can be one of the following:
ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUN
NING,FINISHED,FAILED,KILLED
-appTypes <Types> Works with -list to filter applications
based on input comma-separated list of
application types.
-help Displays help for all commands.
-
kill
<Application ID> Kills the application.
-
list
List applications. Supports optional use
of -appTypes to filter applications based
on application type, and -appStates to
filter applications based on application
state.
-movetoqueue <Application ID> Moves the application to a different
queue.
-
queue
<Queue Name> Works with the movetoqueue command to
specify which queue to move an
application to.
-status <Application ID> Prints the status of the application.
>
yarn application -list
Yarn web ui:
Yarn命令:
http://hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-site/YarnCommands.html#application
Yarn
查看
mart_cld
用户正在运行的任务:
>yarn application -list | grep mart_cld
application_
1464073905
025_7781 Spark shell
//applicationid
后面的
11
位是时间戳,
linux
转为正常时间命令为:
>date -d @1462430473
2016
年
05
月
05
日 星期四
14:41:13 CST
spark运行在yarn上,查看运行进度:
>
yarn application -list
| grep SPARK
Application-Id Application-Name Application-Type User Queue State Final-State Progress Tracking-URL
application_1468582953415_1281732 Spark shell SPARK recsys root.bdp_jmart_recsys.recsys_szda RUNNING UNDEFINED
10%
http://172.18.149.130:36803
application_1468582953415_1275117 sparksql SPARK mart_risk root.bdp_jmart_risk.bdp_jmart_risk_hkh RUNNING UNDEFINED 10% http://172.18.143.152:5396
>
yarn application -status
application_1468582953415_1275117 查看一个任务的状态
Application Report :
Application-Id : application_1468582953415_1275117
Application-Name : sparksql
Application-Type : SPARK
User : mart_risk
Queue : root.bdp_jmart_risk.bdp_jmart_risk_hkh
Start-Time : 1471230629474
Finish-Time : 0
Progress : 10%
State : RUNNING
Final-State : UNDEFINED
Tracking-URL : http://172.18.143.152:5396
RPC Port : 0
AM Host : 172.18.143.152
Aggregate Resource Allocation : 21037914859 MB-seconds, 11156043 vcore-seconds
Diagnostics :
yarn收集日志:
yarn logs -applicationId <application ID>
可以收集应用程序的运行日志,但是必须应用程序运行完才能查看(运行完yarn才聚合日志),同时必须开启日志聚合功能(默认是不开启的),修改yarn.log-aggregation-enable为true.
Yarn
提供的
restful api:
yarn rest api service
http://{http address of service}/ws/{version}/{resourcepath}
curl --compressed -H "Accept: application/json" -X GET "http://BDS-TEST-002:8088/ws/v1/cluster/apps/application_1470800211073_0030"
curl -X GET "http://BDS-TEST-001:8088/ws/v1/cluster/apps/application_1470800211073_0030"