|
2.5 YARN 工作流程
4 v$ |- t: g' p' p+ K) ~* l3 {运行在YARN上的应用程序主要分为两类: 短应用程序和长应用程序, 其中, 短应用程序是指一定时间内( 可能是秒级、 分+ `) {! s. L) G2 ~
钟级或小时级, 尽管天级别或者更长时间的也存在, 但非常少) 可运行完成并正常退出的应用程序, 比如MapReduce作业( 将在* y/ |& J* w, n0 J, S3 Z
第8章介绍) 、 Tez DAG作业( 将在第9章介绍) 等, 长应用程序是指不出意外, 永不终止运行的应用程序, 通常是一些服务, 比
- Q( E9 k8 b7 Y9 s$ O3 o如StormService( 主要包括Nimbus和Supervisor两类服务) , HBase Service( 包括Hmaster和RegionServer两 类服务) [21] 等, 而它们& @5 U' i$ {8 _
本身作为一个框架提供了编程接口供用户使用。 尽管这两类应用程序作用不同, 一类直接运行数据处理程序, 一类用于部署服务. U g& Q' C* N& Q; C8 l: T
( 服务之上再运行数据处理程序) , 但运行在YARN上的流程是相同的。& q8 D# ^/ M5 q, b( ?
当用户向YARN中提交一个应用程序后, YARN将分两个阶段运行该应用程序: 第一个阶段是启动ApplicationMaster; 第二个
5 H1 G; l0 s3 b+ B5 s阶段是由ApplicationMaster创建应用程序, 为它申请资源, 并监控它的整个运行过程, 直到运行完成。 如图2-11所示, YARN的工; r* ?* R! I2 u! u. u
作流程分为以下几个步骤:
8 J6 c3 p6 b' R步骤1 用户向YARN中提交应用程序, 其中包括ApplicationMaster程序、 启动ApplicationMaster的命令、 用户程序等。
" `" M: E. S$ y4 d. {1 G- i6 G) @步骤2 ResourceManager为该应用程序分配第一个Container, 并与对应的Node-Manager通信, 要求它在这个Container中启动应
& w8 P/ S+ d8 l, ~8 ^) m用程序的ApplicationMaster。2 n1 S; i. P- T" M! H
步骤3 ApplicationMaster首先向ResourceManager注册, 这样用户可以直接通过ResourceManage查看应用程序的运行状态, 然/ B" C6 ~6 j$ T2 H
后它将为各个任务申请资源, 并监控它的运行状态, 直到运行结束, 即重复步骤4~7。5 ~- U, H9 q* ^) {
步骤4 ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
6 m4 E( _7 a1 N$ R. }/ \& Q步骤5 一旦ApplicationMaster申请到资源后, 便与对应的NodeManager通信, 要求它启动任务。: k7 d( b# g& I! L1 w
步骤6 NodeManager为任务设置好运行环境( 包括环境变量、 JAR包、 二进制程序等) 后, 将任务启动命令写到一个脚本2 x/ D* u- n6 c/ u4 d" g$ ^: }4 E
中, 并通过运行该脚本启动任务。+ c% t# V3 C- w9 z K: @- ^
步骤7 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度, 以让ApplicationMaster随时掌握各个任务的运8 x8 d. @6 G% O& j _/ c4 z
行状态, 从而可以在任务失败时重新启动任务。1 R+ Q! t& h' K
在应用程序运行过程中, 用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。# n* C! C& T& z
步骤8 应用程序运行完成后, ApplicationMaster向ResourceManager注销并关闭自己。. ^( D+ V/ O% l3 |
图2-11 Apache YARN的工作流程
) w. v; {. O& m" b[21] 关于"HBase On YARN"可阅读http://hortonworks.com/blog/hoya-hbase-on-yarn-application-architecture/。! G2 x2 V% ]0 T8 e3 V% I$ R
2.6 多角度理 2 }4 i5 B4 U& U1 L% P+ n D- W
4 E; s& N$ e. E+ }
& J' _# x6 h( d+ N |
|