java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2993|回复: 0

《深入解析YARN架构设计与实现原理》第2章 YARN设计理念与基本架构【2.4】

[复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66345

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2017-4-13 21:23:55 | 显示全部楼层 |阅读模式
    2.4 YARN 基本架构" O; I6 y  r7 [& c1 P: [4 v3 D
    YARNHadoop 2.0中的资源管理系统, 它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务: 一个全局的8 a/ V, Y; s" t" J, N* b, Q1 @! g- A
    资源管理器
    ResourceManager和每个应用程序特有的ApplicationMaster。 其中ResourceManager负责整个系统的资源管理和分配, 而
    2 y- b: R2 F( @
    ApplicationMaster负责单个应用程序的管理。
    " f. r8 _, T  X2 K0 N* S0 ]
    2.4.1 YARN基本组成结构0 K9 r8 f$ H* I9 [
    YARN总体上仍然是Master/Slave结构, 在整个资源管理框架中, ResourceManagerMasterNodeManager1 \* _. H1 \1 ]' }+ ]& l2 ?
    SlaveResourceManager负责对各个NodeManager上的资源进行统一管理和调度。 当用户提交一个应用程序时, 需要提供一个用以5 u. E0 Z( J+ e- q* M5 }- G1 ?9 D
    跟踪和管理这个程序的
    ApplicationMaster, 它负责向ResourceManager申请资源, 并要求NodeManger启动可以占用一定资源的任  }0 t. i! q* W: _
    务。 由于不同的
    ApplicationMaster被分布到不同的节点上, 因此它们之间不会相互影响。 在本小节中, 我们将对YARN的基本组成
    ( ^# W3 t# Y% Q4 T结构进行介绍。# i0 }' M  l3 ?2 l% J1 ^6 j) n
    2-9描述了YARN的基本组成结构, YARN主要由ResourceManagerNodeManagerApplicationMaster( 图中给出了
    % P- I% Z( ]6 x+ Z% u, t8 V! [4 `( C
    MapReduceMPI两种计算框架的ApplicationMaster, 分别为MR AppMstrMPI AppMstr) 和Container等几个组件构成。
    ! a& |$ ~/ J5 I% ]  G
    2-9 Apache YARN的基本架构1 x4 E4 I  j  Q0 `0 t
    1.ResourceManagerRM9 k# o" g3 A9 _2 Z  C
    RM是一个全局的资源管理器, 负责整个系统的资源管理和分配。 它主要由两个组件构成: 调度器( Scheduler) 和应用程序) r* l9 N7 V+ s8 b  t
    管理器(
    Applications ManagerASM) 。6 h. T* P9 V9 Q* n) {0 m
    1) 调度器# `3 u6 \2 s) X7 q( [3 m
    调度器根据容量、 队列等限制条件( 如每个队列分配一定的资源, 最多执行一定数量的作业等) , 将系统中的资源分配给各
    " s+ x( l' }( n# H/ E个正在运行的应用程序。 需要注意的是, 该调度器是一个
    纯调度器, 它不再从事任何与具体应用程序相关的工作, 比如不负责
    5 j2 L' m' L* N监控或者跟踪应用的执行状态等, 也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务, 这些均交由应用程序相关- H& E, J0 U0 z, @- d
    ApplicationMaster完成。 调度器仅根据各个应用程序的资源需求进行资源分配, 而资源分配单位用一个抽象概念资源容# b/ O5 }6 T# \
    Resource Container, 简称Container) 表示, Container是一个动态资源分配单位, 它将内存、 CPU、 磁盘、 网络等资源封装在2 ?% d9 x) v0 i. H
    一起, 从而限定每个任务使用的资源量。 此外, 该调度器是一个可插拔的组件, 用户可根据自己的需要设计新的调度器,
    YARN$ {  u7 z) d/ }5 k7 W; x6 k+ _' K) N
    提供了多种直接可用的调度器, 比如Fair SchedulerCapacity Scheduler等。5 o  r( C7 I' G
    2) 应用程序管理器& b: T; k$ t$ s3 y7 A* O9 G( `
    应用程序管理器负责管理整个系统中所有应用程序, 包括应用程序提交、 与调度器协商资源以启动
    ApplicationMaster、 监控
    $ x: t6 {0 M) g5 V! a+ _% \
    ApplicationMaster运行状态并在失败时重新启动它等。
    0 o$ p* s5 E% Y) T* ^
    2.ApplicationMasterAM
    4 |. k( S" h; q& g  }
    用户提交的每个应用程序均包含一个AM, 主要功能包括:
    1 V0 S! i4 t8 X. I) ~1 I% d
    ❑RM调度器协商以获取资源( 用Container表示) ;
    3 n4 c5 p( c! u( m" x1 n, a
    ❑将得到的任务进一步分配给内部的任务;  A6 b1 }: p% R& o
    ❑NM通信以启动/停止任务;
    & ^; h' l) z* L$ `
    ❑监控所有任务运行状态, 并在任务运行失败时重新为任务申请资源以重启任务。
    ) a' r- N0 y% h当前
    YARN自带了两个AM实现, 一个是用于演示AM编写方法的实例程序distributedshell, 它可以申请一定数目的Container) i6 D) n- d" x# a7 Z0 |& a
    并行运行一个
    Shell命令或者Shell脚本; 另一个是运行MapReduce应用程序的AM—MRAppMaster, 我们将在第8章对其进行介绍。
    : L& l; X& ?+ ^$ Q$ C- g( W6 R此外, 一些其他的计算框架对应的
    AM正在开发中, 比 如Open MPISpark[18]
    ! p) x6 y1 Y: S7 S3 J
    3.NodeManagerNM
    . o% W( B+ o2 p
    NM是每个节点上的资源和任务管理器, 一方面, 它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状
    3 L: Y  [1 U; W1 r$ w6 w态; 另一方面, 它接收并处理来自
    AMContainer启动/停止等各种请求。
    7 t( G& y7 u$ U2 J4 m0 k# P
    4.Container
    9 h1 I; u. V" M7 `! F
    ContainerYARN中的资源抽象, 它封装了某个节点上的多维度资源, 如内存、 CPU、 磁盘、 网络等, 当AMRM申请资源1 j. ^7 S# o/ Y6 x, l8 l
    时,
    RMAM返回的资源便是用Container表示的。 YARN会为每个任务分配一个Container, 且该任务只能使用该Container中描述的7 V$ `% H0 ^1 X. Q: H
    资源。 需要注意的是,
    Container不同于MRv1中的slot, 它是一个动态资源划分单位, 是根据应用程序的需求动态生成的。 截至本* t1 v" \, G( X7 }. Y% D" S6 x. H3 }
    书完成时,
    YARN仅支持CPU和内存两种资源, 且使用了轻量级资源隔离机制Cgroups进行 资源隔离 [19] & n$ c8 X1 ]9 s0 I
    2.4.2 YARN通信协议( W+ f) {4 z' ~& o/ N
    RPC协议是连接各个组件的大动脉, 了解不同组件之间的RPC协议有助于我们更深入地学习YARN框架。 在YARN中, 任何
    ! J. m8 C6 G, m! t两个需相互通信的组件之间仅有一个RPC协议, 而对于任何一个RPC协议, 通信双方有一端是Client, 另一端为Server, 且Client
    4 w4 M. D; X: c; i8 S+ M# s是主动连接
    Server的, 因此, YARN实际上采用的是拉式( pull-based) 通信模型。 如图2-10所示, 箭头指向的组件是RPC Server9 `& Z3 }7 d- Y; @  e1 O
    而箭头尾部的组件是
    RPC ClientYARN主要由以下几个RPC协 议组成 [20]
    ! ~& [7 |1 `4 f+ ]" D5 V9 C
    ❑JobClient( 作业提交客户端) 与RM之间的协议—ApplicationClientProtocolJobClient通过该RPC协议提交应用程序、 查询应
    8 \' h2 ]& l: ?6 D用程序状态等。8 d3 W8 r* l0 \$ K
    ❑Admin( 管理员) 与RM之间的通信协议—ResourceManagerAdministrationProtocolAdmin通过该RPC协议更新系统配置文件,
    4 J' I0 u, W7 a' T比如节点黑白名单、 用户队列权限等。7 t/ w7 y0 L9 U3 d, J% S
    ❑AMRM之间的协议—ApplicationMasterProtocolAM通过该RPC协议向RM注册和撤销自己, 并为各个任务申请资源。) F1 x6 Q* @* ?; `; f- M
    ❑AMNM之间的协议—ContainerManagementProtocolAM通过该RPC要求NM启动或者停止Container, 获取各个Container
    " X' o" ?; c% n# l# `4 l使用状态等信息。$ Q. }( K: b+ H) [6 y
    ❑NMRM之间的协议—ResourceTrackerNM通过该RPC协议向RM注册, 并定时发送心跳信息汇报当前节点的资源使用情
    8 f6 ^2 u9 a: }: B况和
    Container运行情况。, u" L; v$ s8 C& p
    2-10 Apache YARNRPC协议
    ) ]8 ~- r' @0 ^2 J. t) Q为了提高
    Hadoop的向后兼容性和不同版本之间的兼容性, YARN中的序列化框架采用了Google开源的Protocol Buffers
    5 @/ r& u- V0 x0 }- S. b
    Protocol Buffers的引入使得YARN具有协议向后兼容性, 相关内容将在第3章介绍。% l  t* t* w5 R/ O# Y
    [18] 参见网址http://wiki.apache.org/hadoop/PoweredByYarn
    # U7 F# y: o! S: m* P
    [19] 参见网址https://issues.apache.org/jira/browse/YARN-3
    ; R, w) Q8 e6 z) P
    [20] RPC协议名称在2.1.0-beta版本进行了重构, 之前的名称分别为: ClientRMProtocolRMAdminProtocolAMRMProtocol" {: W* p/ W1 P, K* H4 u3 }
    ContainerManagerResourceTracker( 该协议名称未变)  ) T; t" @, [, o0 w
    5 G, c7 r# H% f, r9 k+ L

    4 c# C# n5 K; y/ y0 c. O& w- B
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2024-11-21 17:48 , Processed in 0.267544 second(s), 31 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表