|
2.4 YARN 基本架构" q7 Z1 \/ X% l
YARN是Hadoop 2.0中的资源管理系统, 它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务: 一个全局的, N7 t5 h( t9 ?! o+ [
资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。 其中ResourceManager负责整个系统的资源管理和分配, 而
- \' G" o+ ?/ S4 BApplicationMaster负责单个应用程序的管理。) b0 C% E: ^, k( G
2.4.1 YARN基本组成结构: f: ?, l% W8 w& t# K c. D
YARN总体上仍然是Master/Slave结构, 在整个资源管理框架中, ResourceManager为Master, NodeManager为2 |, v1 D9 b: g% U
Slave, ResourceManager负责对各个NodeManager上的资源进行统一管理和调度。 当用户提交一个应用程序时, 需要提供一个用以6 L9 f' s$ N/ \9 @7 e- m" n
跟踪和管理这个程序的ApplicationMaster, 它负责向ResourceManager申请资源, 并要求NodeManger启动可以占用一定资源的任
* {: C! r! } |7 r- W, u" P0 {& ?务。 由于不同的ApplicationMaster被分布到不同的节点上, 因此它们之间不会相互影响。 在本小节中, 我们将对YARN的基本组成
0 Y/ i5 i( X; q8 a结构进行介绍。
: z: F+ e9 ] H0 U图2-9描述了YARN的基本组成结构, YARN主要由ResourceManager、 NodeManager、 ApplicationMaster( 图中给出了) `; Z/ P! f. L5 G
MapReduce和MPI两种计算框架的ApplicationMaster, 分别为MR AppMstr和MPI AppMstr) 和Container等几个组件构成。
& r( w d" u9 f& D图2-9 Apache YARN的基本架构) n+ n P* I- k8 v9 r- F
1.ResourceManager( RM)5 A: D+ a# B: d7 w4 Y, [6 ]
RM是一个全局的资源管理器, 负责整个系统的资源管理和分配。 它主要由两个组件构成: 调度器( Scheduler) 和应用程序
; g& i8 ]2 q2 q0 d C' [8 _, g管理器( Applications Manager, ASM) 。: {! c* x: W& k5 v
( 1) 调度器
6 Q" ^% Y4 Y; I! ]8 j" B调度器根据容量、 队列等限制条件( 如每个队列分配一定的资源, 最多执行一定数量的作业等) , 将系统中的资源分配给各
9 a% s* k' p4 R" H个正在运行的应用程序。 需要注意的是, 该调度器是一个“纯调度器”, 它不再从事任何与具体应用程序相关的工作, 比如不负责# a9 s" X% f+ d& C
监控或者跟踪应用的执行状态等, 也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务, 这些均交由应用程序相关- o6 L3 B. D: q. e7 A
的ApplicationMaster完成。 调度器仅根据各个应用程序的资源需求进行资源分配, 而资源分配单位用一个抽象概念“资源容$ o' w, L. d* g5 _
器”( Resource Container, 简称Container) 表示, Container是一个动态资源分配单位, 它将内存、 CPU、 磁盘、 网络等资源封装在& l3 W8 x) M. x
一起, 从而限定每个任务使用的资源量。 此外, 该调度器是一个可插拔的组件, 用户可根据自己的需要设计新的调度器, YARN
7 d1 g- ]/ @* t# O: v" I提供了多种直接可用的调度器, 比如Fair Scheduler和Capacity Scheduler等。* B& p6 d2 F( L) `3 K
( 2) 应用程序管理器% S4 C9 R' L p* ^
应用程序管理器负责管理整个系统中所有应用程序, 包括应用程序提交、 与调度器协商资源以启动ApplicationMaster、 监控
' I, A2 r! K" G; NApplicationMaster运行状态并在失败时重新启动它等。3 L+ r Y6 z2 Z; u) n# H$ U
2.ApplicationMaster( AM)
: ?" H$ x! v2 C用户提交的每个应用程序均包含一个AM, 主要功能包括:4 W( M1 d# B+ \) C/ w9 e
❑与RM调度器协商以获取资源( 用Container表示) ;) u0 y* R) O2 e( v; s a
❑将得到的任务进一步分配给内部的任务;" D! s+ M# w( ^4 S5 j5 {
❑与NM通信以启动/停止任务;! l- }& z: r1 B8 r
❑监控所有任务运行状态, 并在任务运行失败时重新为任务申请资源以重启任务。3 ]* c7 Q# f. d% Q/ U
当前YARN自带了两个AM实现, 一个是用于演示AM编写方法的实例程序distributedshell, 它可以申请一定数目的Container以
$ ?) _6 g5 v- D$ t并行运行一个Shell命令或者Shell脚本; 另一个是运行MapReduce应用程序的AM—MRAppMaster, 我们将在第8章对其进行介绍。
; n1 A* t$ Z: l+ J$ c此外, 一些其他的计算框架对应的AM正在开发中, 比 如Open MPI、 Spark等 [18] 。$ {+ } J# O0 B3 ]
3.NodeManager( NM), }- j1 E; o; T" q) G4 m
NM是每个节点上的资源和任务管理器, 一方面, 它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状/ E& ]3 j6 U) a) H4 Z& H9 O
态; 另一方面, 它接收并处理来自AM的Container启动/停止等各种请求。/ O: f) P1 V! L; T) q
4.Container6 m0 L2 m s6 W7 B
Container是YARN中的资源抽象, 它封装了某个节点上的多维度资源, 如内存、 CPU、 磁盘、 网络等, 当AM向RM申请资源: l: I4 v% J8 s1 w
时, RM为AM返回的资源便是用Container表示的。 YARN会为每个任务分配一个Container, 且该任务只能使用该Container中描述的7 K9 {6 }+ J! z3 I; g8 t D
资源。 需要注意的是, Container不同于MRv1中的slot, 它是一个动态资源划分单位, 是根据应用程序的需求动态生成的。 截至本6 [8 w& ?: y F: }
书完成时, YARN仅支持CPU和内存两种资源, 且使用了轻量级资源隔离机制Cgroups进行 资源隔离 [19] 。
4 h( J8 \. C# B0 r7 P n# p V2.4.2 YARN通信协议
5 N8 _+ C$ Y- N, [2 B. {- d. |- BRPC协议是连接各个组件的“大动脉”, 了解不同组件之间的RPC协议有助于我们更深入地学习YARN框架。 在YARN中, 任何 l( b8 K) M5 F4 o) h
两个需相互通信的组件之间仅有一个RPC协议, 而对于任何一个RPC协议, 通信双方有一端是Client, 另一端为Server, 且Client总0 K0 J: p7 {# i9 } m
是主动连接Server的, 因此, YARN实际上采用的是拉式( pull-based) 通信模型。 如图2-10所示, 箭头指向的组件是RPC Server,
4 N2 W3 o" g N# e而箭头尾部的组件是RPC Client, YARN主要由以下几个RPC协 议组成 [20] :: J: t, d7 t1 J8 X; b1 M
❑JobClient( 作业提交客户端) 与RM之间的协议—ApplicationClientProtocol: JobClient通过该RPC协议提交应用程序、 查询应
7 v# G, O; H) M/ M% B用程序状态等。
/ _& H% Z$ {' v' H5 ^8 n9 }❑Admin( 管理员) 与RM之间的通信协议—ResourceManagerAdministrationProtocol: Admin通过该RPC协议更新系统配置文件,
. y7 i; M; M- A& M, a比如节点黑白名单、 用户队列权限等。
) p+ p T- j: c❑AM与RM之间的协议—ApplicationMasterProtocol: AM通过该RPC协议向RM注册和撤销自己, 并为各个任务申请资源。9 Q) W4 f( _2 M" h' H. p3 h9 q
❑AM与NM之间的协议—ContainerManagementProtocol: AM通过该RPC要求NM启动或者停止Container, 获取各个Container的& [2 Y2 \/ A u- h
使用状态等信息。
7 a9 Y& [0 t! O0 B) W& l: N2 N) S4 H❑NM与RM之间的协议—ResourceTracker: NM通过该RPC协议向RM注册, 并定时发送心跳信息汇报当前节点的资源使用情
* i. @; K9 Z W- f8 O) \况和Container运行情况。
; l2 b( C3 s5 W# R( b2 s& t) b图2-10 Apache YARN的RPC协议- r3 p F* L4 Y; ~+ O; _ N! n0 E
为了提高Hadoop的向后兼容性和不同版本之间的兼容性, YARN中的序列化框架采用了Google开源的Protocol Buffers。
3 d; z7 i8 g/ b3 t/ y# e3 d- QProtocol Buffers的引入使得YARN具有协议向后兼容性, 相关内容将在第3章介绍。
7 I- K1 m9 Y+ w; l: T; `[18] 参见网址http://wiki.apache.org/hadoop/PoweredByYarn。
4 T& j5 q+ V% Y, `# K4 P[19] 参见网址https://issues.apache.org/jira/browse/YARN-3。
# `2 }: v& g' v+ h/ Z1 J! K[20] RPC协议名称在2.1.0-beta版本进行了重构, 之前的名称分别为: ClientRMProtocol、 RMAdminProtocol、 AMRMProtocol、
' l& s* ?' ]0 AContainerManager、 ResourceTracker( 该协议名称未变)
4 ^4 p/ ^- F% _( c3 S
3 C1 _/ Q: g0 A4 F+ y- G2 X5 |+ [, V. ^: M2 I* C$ q
|
|