|
3.6 源代码阅读引导7 b' v3 L- v3 R7 s6 n5 F
为了帮助读者更好地阅读源代码, 笔者特意安排了本节。 下面我们分两部分对读者进行指导。
$ d( e5 n [; A1.Hadoop RPC" R$ _. `% ]# n4 ]1 K c
Hadoop RPC内部实现位于源代码目录中hadoop-common-project/hadoop-common/src/main/java下的org.apache.hadoop.ipc包中, 而
4 J9 }4 E3 g5 \& F& g w! VYARN对RPC的Protocol Buffers封装则位于hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java目录下的
- _4 I. W/ Z2 L+ \# J1 {' i' _org.apache.hadoop.yarn.ipc包中。 建议读者按照以下流程学习这部分源代码: 首先尝试使用Hadoop RPC编写一个C/S服务器, 然后! }8 A& C- x3 O) a8 B
在理解Hadoop RPC整体架构的基础上, 依次阅读客户端部分代码和服务器端代码, 如果能够描述清楚下面两个流程, 则可认为; x: y4 [" h; r6 V9 Z2 D
对Hadoop RPC有了较为深入的理解。
Z: l- X" f) T8 d9 A7 A0 P❑客户端发送一个请求到接收到请求应答的整个过程是怎样的, 依次经过了哪些函数调用和通信过程;. H* i7 M2 P) d0 G, R
❑多个客户端并发发送请求到服务器端后, 服务器端是如何处理的。
7 C. x% l4 i* t2.服务库、 事件库和状态机9 u. z' H' t+ E- f
了解服务库、 事件库和状态机库源代码所在目录可使读者省去许多麻烦。1 y* r8 W0 P* @8 \: p7 s& d
❑服务库位于源代码目录hadoop-common-project/hadoop-common/src/main/java下的org.apache.hadoop.yarn.service包中。- N, V2 i; ^; F2 P* k
❑事件库和状态机位于源代码目录中hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java下的; s3 J4 m; U o
org.apache.hadoop.yarn.event和org.apache.hadoop.yarn.state两个包中。
9 v; l% L- A# x1 c! s5 d* t建议读者按照以下流程学习这部分源代码: 首先弄清楚各个包的对外接口, 然后尝试编写几个实例使用这几个库。 当然, 读9 P0 q; H/ t1 Q' Z, t) ?
者也可以跟着YARN源代码学习这几个库, YARN源代码是这几个库的最好应用实例。
# t& k# M) x, B6 W3.7 小结
0 P' x* U2 v; Q. OYARN基础库是其他一切模块的基础, 它的设计直接决定了YARN的稳定性和扩展性, YARN借用了MRv1的一些底层基础. j# G) g& @$ t4 \" o# y2 \- V
库, 比如RPC库等, 但因为引入了很多新的软件设计方式, 所以它的基础库更多, 包括直接使用了开源序列化框架Protocol
. [1 c; q% z& P kBuffers和Apache Avro, 自定义的服务库、 事件库和状态机等。 本章介绍了YARN最重要的几个基础库。
, v- L: B4 `! j* |8 d% a3.8 问题讨论
{0 X, ]6 a) N8 i- y问题1: 引入Protocol Buffers之后, Hadoop RPC是否能像Thrift RPC或者Avro RPC那样具有跨语言特性, 比如Server采用Java编
# F. u( Y3 p. E: k% Z& H: k写, Client采用C++编写?
! ?1 R# X+ T, C4 r. U问题2: 如果Hadoop RPC具备跨语言特性, 那么相比于Thrift或者Apache Avro, Hadoop RPC有什么优缺点? 如果不具备, 该7 J5 {- e$ N6 P$ O' R# \' x/ `' a
如何让它具备跨语言特性呢?
" }% l9 G, @; P问题3: Hadoop RPC具备跨语言特性后, 将带来哪些好处? 2 K5 M/ T* ~+ Q- Y$ ^! I% l) v, C
4 c. C6 K8 i/ z. I, i
4 d3 p+ a1 `7 F) s- k- ~
|
|