|
2.4 YARN 基本架构- \$ V1 i! J: S P0 M
YARN是Hadoop 2.0中的资源管理系统, 它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务: 一个全局的6 Q* i( l H! j; M C( }6 |) I* R* h
资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。 其中ResourceManager负责整个系统的资源管理和分配, 而! e& a- |: }- a) U$ Q% V* M- {
ApplicationMaster负责单个应用程序的管理。
/ O! G( |% o3 E* ?5 `2.4.1 YARN基本组成结构: p/ u7 E' e1 {# I
YARN总体上仍然是Master/Slave结构, 在整个资源管理框架中, ResourceManager为Master, NodeManager为% S( Q$ y+ R ]- n4 x6 X6 K- X
Slave, ResourceManager负责对各个NodeManager上的资源进行统一管理和调度。 当用户提交一个应用程序时, 需要提供一个用以
% l4 ?+ N* M4 s! j# Y5 R跟踪和管理这个程序的ApplicationMaster, 它负责向ResourceManager申请资源, 并要求NodeManger启动可以占用一定资源的任: o, D* f, P' b% D6 x; F
务。 由于不同的ApplicationMaster被分布到不同的节点上, 因此它们之间不会相互影响。 在本小节中, 我们将对YARN的基本组成
! e7 ?) C( z0 V! m8 R% k( j结构进行介绍。
$ _2 O: Q" }- h/ n* d7 q+ e图2-9描述了YARN的基本组成结构, YARN主要由ResourceManager、 NodeManager、 ApplicationMaster( 图中给出了0 u- o2 p6 a: T, i0 x
MapReduce和MPI两种计算框架的ApplicationMaster, 分别为MR AppMstr和MPI AppMstr) 和Container等几个组件构成。9 I7 l1 H. P( R6 u* j5 q
图2-9 Apache YARN的基本架构2 r3 b8 X3 }% h6 K# G- F# K1 Z
1.ResourceManager( RM)
% V. z$ l! w* TRM是一个全局的资源管理器, 负责整个系统的资源管理和分配。 它主要由两个组件构成: 调度器( Scheduler) 和应用程序5 b% t+ C4 ~7 r* W, c& [
管理器( Applications Manager, ASM) 。 H- C/ [/ G' \1 F; N
( 1) 调度器) c g1 F& \$ ?9 f2 R
调度器根据容量、 队列等限制条件( 如每个队列分配一定的资源, 最多执行一定数量的作业等) , 将系统中的资源分配给各
* W9 b0 K7 D: r3 M) u% ^- A7 p+ \个正在运行的应用程序。 需要注意的是, 该调度器是一个“纯调度器”, 它不再从事任何与具体应用程序相关的工作, 比如不负责5 [, Q: C( H& x+ Y) Y# Z( S
监控或者跟踪应用的执行状态等, 也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务, 这些均交由应用程序相关
1 q4 d; K4 R! @% x$ }的ApplicationMaster完成。 调度器仅根据各个应用程序的资源需求进行资源分配, 而资源分配单位用一个抽象概念“资源容
6 T& e4 }! a, c4 A o) z器”( Resource Container, 简称Container) 表示, Container是一个动态资源分配单位, 它将内存、 CPU、 磁盘、 网络等资源封装在0 h: w" y/ F/ W3 T
一起, 从而限定每个任务使用的资源量。 此外, 该调度器是一个可插拔的组件, 用户可根据自己的需要设计新的调度器, YARN+ N' |/ u" m! }* ~; ?, e; G
提供了多种直接可用的调度器, 比如Fair Scheduler和Capacity Scheduler等。
0 ~7 _* y' E" q2 ~( 2) 应用程序管理器8 d- k, n! q- f( }% s
应用程序管理器负责管理整个系统中所有应用程序, 包括应用程序提交、 与调度器协商资源以启动ApplicationMaster、 监控
$ {, s G# |$ I+ W/ VApplicationMaster运行状态并在失败时重新启动它等。* m+ Y% f( g0 S2 N7 E; m4 f
2.ApplicationMaster( AM)
. B) w; ]# h# V- B0 R用户提交的每个应用程序均包含一个AM, 主要功能包括:7 y8 Z% e' `1 g5 ~' f6 v
❑与RM调度器协商以获取资源( 用Container表示) ;
3 w5 c) t. w, t- z/ g9 k# N❑将得到的任务进一步分配给内部的任务;
7 z- ?/ u6 z1 X l4 H% I( L# C❑与NM通信以启动/停止任务;! L4 h9 C* e* l6 d) S
❑监控所有任务运行状态, 并在任务运行失败时重新为任务申请资源以重启任务。
& d1 U( L2 ^: i/ ~/ \. a, G7 g/ l当前YARN自带了两个AM实现, 一个是用于演示AM编写方法的实例程序distributedshell, 它可以申请一定数目的Container以
, G n9 c# f, e& H7 R并行运行一个Shell命令或者Shell脚本; 另一个是运行MapReduce应用程序的AM—MRAppMaster, 我们将在第8章对其进行介绍。
9 a- R9 h* h8 w) w) h# w此外, 一些其他的计算框架对应的AM正在开发中, 比 如Open MPI、 Spark等 [18] 。
0 }% A: {) a, B# ~3.NodeManager( NM)% p* g. W9 t1 f2 U v
NM是每个节点上的资源和任务管理器, 一方面, 它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状) `; O4 f) w! \0 ]4 o2 T2 w2 Y
态; 另一方面, 它接收并处理来自AM的Container启动/停止等各种请求。* C7 {+ p; v9 |0 p& q5 R
4.Container' Y( M4 E" P) Z4 h; J
Container是YARN中的资源抽象, 它封装了某个节点上的多维度资源, 如内存、 CPU、 磁盘、 网络等, 当AM向RM申请资源0 l) J# k$ u4 l$ T& M
时, RM为AM返回的资源便是用Container表示的。 YARN会为每个任务分配一个Container, 且该任务只能使用该Container中描述的
/ a, w; i- k" s资源。 需要注意的是, Container不同于MRv1中的slot, 它是一个动态资源划分单位, 是根据应用程序的需求动态生成的。 截至本) I$ ~3 y( C" j3 H2 F4 q1 P
书完成时, YARN仅支持CPU和内存两种资源, 且使用了轻量级资源隔离机制Cgroups进行 资源隔离 [19] 。( m9 Q! G! _3 c3 v. k: n
2.4.2 YARN通信协议' K; X) p" C. p$ s; B$ c6 Y2 e
RPC协议是连接各个组件的“大动脉”, 了解不同组件之间的RPC协议有助于我们更深入地学习YARN框架。 在YARN中, 任何- [$ O, z' L# L: Y" ^, I: [
两个需相互通信的组件之间仅有一个RPC协议, 而对于任何一个RPC协议, 通信双方有一端是Client, 另一端为Server, 且Client总
1 b6 D7 U8 {6 B是主动连接Server的, 因此, YARN实际上采用的是拉式( pull-based) 通信模型。 如图2-10所示, 箭头指向的组件是RPC Server,
- b2 I: n' l, j+ [4 l& @! z8 d而箭头尾部的组件是RPC Client, YARN主要由以下几个RPC协 议组成 [20] :
: A7 K6 A. H5 d$ j& U❑JobClient( 作业提交客户端) 与RM之间的协议—ApplicationClientProtocol: JobClient通过该RPC协议提交应用程序、 查询应 O# ~5 l# o, `+ Z# g
用程序状态等。
( o, z, q9 ?; D1 c1 O❑Admin( 管理员) 与RM之间的通信协议—ResourceManagerAdministrationProtocol: Admin通过该RPC协议更新系统配置文件,
+ ]+ @( A1 Z' v3 ]: Q1 y) u% D: U比如节点黑白名单、 用户队列权限等。1 u! G, r$ ^5 @0 ^
❑AM与RM之间的协议—ApplicationMasterProtocol: AM通过该RPC协议向RM注册和撤销自己, 并为各个任务申请资源。5 b7 S K) R/ f" f! J
❑AM与NM之间的协议—ContainerManagementProtocol: AM通过该RPC要求NM启动或者停止Container, 获取各个Container的# ?+ q& o, u6 _( _) E
使用状态等信息。( R1 F) X1 a) ]( p1 s6 X! R4 Y9 y" F
❑NM与RM之间的协议—ResourceTracker: NM通过该RPC协议向RM注册, 并定时发送心跳信息汇报当前节点的资源使用情/ B, U/ ^. h0 Y6 ^, N& L1 ~: j
况和Container运行情况。
! P+ `# @' M. G% p& P图2-10 Apache YARN的RPC协议
0 d! }( B6 a% q1 [8 k& v为了提高Hadoop的向后兼容性和不同版本之间的兼容性, YARN中的序列化框架采用了Google开源的Protocol Buffers。: U' D i2 g8 v o2 K6 S7 J( E
Protocol Buffers的引入使得YARN具有协议向后兼容性, 相关内容将在第3章介绍。$ r l3 M0 @% p, f8 P
[18] 参见网址http://wiki.apache.org/hadoop/PoweredByYarn。2 c" d: N8 b* K: E* W- ~
[19] 参见网址https://issues.apache.org/jira/browse/YARN-3。
% R t6 ]0 T/ ^* z3 i% ?[20] RPC协议名称在2.1.0-beta版本进行了重构, 之前的名称分别为: ClientRMProtocol、 RMAdminProtocol、 AMRMProtocol、
! `6 \2 i8 ~6 o3 x1 zContainerManager、 ResourceTracker( 该协议名称未变)
6 F7 z" P0 g7 c- o$ U! d$ ?( ?* a6 x
, x9 ?/ T, w, H! s$ a
6 w" x% \6 m# |, r6 [6 L |
|