|
2.5 YARN 工作流程5 {$ T, D7 p/ ?9 F1 ~/ `; m
运行在YARN上的应用程序主要分为两类: 短应用程序和长应用程序, 其中, 短应用程序是指一定时间内( 可能是秒级、 分
) t4 s' @& {6 k钟级或小时级, 尽管天级别或者更长时间的也存在, 但非常少) 可运行完成并正常退出的应用程序, 比如MapReduce作业( 将在0 l8 o1 g0 @" X6 J% y4 l
第8章介绍) 、 Tez DAG作业( 将在第9章介绍) 等, 长应用程序是指不出意外, 永不终止运行的应用程序, 通常是一些服务, 比) H Y2 X' o' I8 A) O
如StormService( 主要包括Nimbus和Supervisor两类服务) , HBase Service( 包括Hmaster和RegionServer两 类服务) [21] 等, 而它们
4 M) ^+ ~7 L4 Q" D6 [' ^! B本身作为一个框架提供了编程接口供用户使用。 尽管这两类应用程序作用不同, 一类直接运行数据处理程序, 一类用于部署服务
3 Z$ u* g, [2 q7 V( 服务之上再运行数据处理程序) , 但运行在YARN上的流程是相同的。0 u/ Z4 g+ k: W+ B
当用户向YARN中提交一个应用程序后, YARN将分两个阶段运行该应用程序: 第一个阶段是启动ApplicationMaster; 第二个, {: v% A x% t4 f* O: e
阶段是由ApplicationMaster创建应用程序, 为它申请资源, 并监控它的整个运行过程, 直到运行完成。 如图2-11所示, YARN的工* ~2 N0 b% n" ]4 w
作流程分为以下几个步骤:6 R6 w5 ~& P5 Y
步骤1 用户向YARN中提交应用程序, 其中包括ApplicationMaster程序、 启动ApplicationMaster的命令、 用户程序等。
2 o, L3 J5 H" o3 m5 \4 [步骤2 ResourceManager为该应用程序分配第一个Container, 并与对应的Node-Manager通信, 要求它在这个Container中启动应 M: Z' O: J! d' d) p* t
用程序的ApplicationMaster。
! e" e+ F0 J! i' j, A步骤3 ApplicationMaster首先向ResourceManager注册, 这样用户可以直接通过ResourceManage查看应用程序的运行状态, 然6 b" `2 M7 [, \# |& ]: G
后它将为各个任务申请资源, 并监控它的运行状态, 直到运行结束, 即重复步骤4~7。1 e5 L! D+ B1 M: J- J
步骤4 ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
: L* [, b% _. j7 N5 t4 X步骤5 一旦ApplicationMaster申请到资源后, 便与对应的NodeManager通信, 要求它启动任务。! u1 G, e+ ]7 X5 [; k- w
步骤6 NodeManager为任务设置好运行环境( 包括环境变量、 JAR包、 二进制程序等) 后, 将任务启动命令写到一个脚本
2 r- b( S( Z+ D中, 并通过运行该脚本启动任务。$ j' z, H% f* y) k! i5 G
步骤7 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度, 以让ApplicationMaster随时掌握各个任务的运. ^4 S6 o0 Z! D4 T# |1 A
行状态, 从而可以在任务失败时重新启动任务。
/ X( ~( F7 s7 d4 \9 a; p在应用程序运行过程中, 用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
) ^- _. D" f) Y+ \$ R! ?步骤8 应用程序运行完成后, ApplicationMaster向ResourceManager注销并关闭自己。
- j3 ^! T/ A% t图2-11 Apache YARN的工作流程9 [7 F Z: X. P2 v" D+ d( D1 Y5 I
[21] 关于"HBase On YARN"可阅读http://hortonworks.com/blog/hoya-hbase-on-yarn-application-architecture/。
- w! F6 r! t6 H8 }! Z- k @" g2.6 多角度理
$ C1 R& R4 n) }: L* C# |$ u
& j4 B0 N {5 t. N
5 ~* t8 s6 ^, }6 C9 T |
|