|
第二部分 YARN 核心设计篇
1 [+ K; d8 p- G- f) S# aYARN是一个通用资源管理系统, 可为上层应用提供统一的资源管理和调度, 它的引入为集群在利用率、 资源统一管理和数9 k: b* m. z8 n( k+ Y p4 z o
据共享等方面带来了巨大好处。 本书第二部分将从底层基础库、 应用程序编程接口、 运行时环境等方面深入剖析YARN的内部原) O3 g* ~3 j3 {& N
理和实现, 读者通过对这部分的学习应可编写出运行在YARN上的应用程序, 且能根据实际项目需求完成对YARN的二次开发。
9 e4 t. a; s8 r3 _1 w# S第3章 YARN基础库. [4 w% q! F8 K! ~& o1 j; m8 x
与MRv1的实现相比, YARN的实现要复杂得多。 YARN借用了MRv1的一些底层基础库( 如RPC库) , 因为引入了很多新的% d* H$ {# V- G. z3 k l2 T, t
软件设计方式, 它的基础库更多, 例如直接使用开源序列化框架Protocol Buffers和Apache Avro, 及自定义的服务库、 事件库和状
2 p" e8 t* ?1 f6 h: x/ R态机等。
$ h5 v$ Z, [! O9 h x本章介绍的YARN基础库是理解后面几章内容的基础, 重要性不言而喻。 其中有些基础库是开源的, 并且被广泛使用, 读者
! i- u! j. S- d; k) ]1 Z可根据自己的情况选择性阅读。
& i; J$ Y! @+ F! z3.1 概述5 y8 T+ L8 e& A5 C* z
YARN基础库是其他一切模块的基础, 它的设计直接决定了YARN的稳定性和扩展性, 概括起来, YARN的基础库主要有以
3 J5 I# q: ?) d# E# A! S下几个。
9 Q# h/ w8 q2 U: \6 i❑Protocol Buffers: Protocol Buffers是Google开源的序列化库, 具有平台无关、 高性能、 兼容性好等优点。 YARN将Protocol# f2 |) \8 W. q
Buffers用到了RPC通信中, 默认情况下, YARN RPC中所有参数采用Protocol Buffers进行序列化/反序列化, 相比于MRv1中基于自& \3 a# A4 a7 ^4 z3 F
定义Writable框架的方式, YARN在向后兼容性、 扩展性等方面提高了很多。3 i; k7 ~' B" c: b) T: E
❑Apache Avro: Avro是Hadoop生态系统中的RPC框架, 具有平台无关、 支持动态模式( 无需编译) 等优点, Avro的最初设/ Y3 F. L1 ~; W) @/ o3 |9 Q3 c
计动机是解决YARN RPC兼容性和扩展性差等问题, 目前, YARN采用Avro记录MapReduce应用程序日志( 用于故障后应用程序
1 I$ f' Q8 z) f4 n) M7 X E恢复) , 今后可能代替Protocol Buffers作为RPC辅助库( 至少会作为一个可选方案) 。
* v5 }9 @5 b& |+ Q) v' b0 ?( r/ [- U❑RPC库: YARN仍采用了MRv1中的RPC库, 但其中采用的默认序列化方法被替换成了Protocol Buffers。
4 R; W* r8 b( X- @5 \$ q❑服务库和事件库: YARN将所有的对象服务化, 以便统一管理( 比创建、 销毁等) , 而服务之间则采用事件机制进行通; X" y: S b4 z M4 x' p
信, 不再使用类似MRv1中基于函数调用的方式。8 R9 y* j o. r: W3 r7 R, g
❑状态机库: 状态机是一种表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 在YARN中, 很多对象都: r; U0 q3 ]" x0 J N5 C9 X
是由若干状态组成的, 且当有事件发生时, 状态之间会发生转移, 比如作业、 任务、 Container等, 而YARN正是采用有限状态机
9 M1 q& I* ^ c描述一些对象的状态以及状态之间的转移。 引入状态机模型后, 相比MRv1, YARN的代码结构更加清晰易懂了。) t8 f$ r% [3 z: t: b
理解以上这几个库是阅读后面几章的基础, 本章将详细介绍这几个库。 " B& b' y F3 b. x
& i; h* c6 b' e% ~0 C: X ]) g+ p1 k
|
|