|
3.6 源代码阅读引导- S0 N4 |7 s, y
为了帮助读者更好地阅读源代码, 笔者特意安排了本节。 下面我们分两部分对读者进行指导。3 n' Y3 o- K7 l' w7 q
1.Hadoop RPC! o2 y4 x8 y% F/ A$ M; _
Hadoop RPC内部实现位于源代码目录中hadoop-common-project/hadoop-common/src/main/java下的org.apache.hadoop.ipc包中, 而
: a# O7 Y l$ Z# ?" mYARN对RPC的Protocol Buffers封装则位于hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java目录下的
9 b) X0 }3 a; c7 zorg.apache.hadoop.yarn.ipc包中。 建议读者按照以下流程学习这部分源代码: 首先尝试使用Hadoop RPC编写一个C/S服务器, 然后
. Z4 q. i: \' W8 s% X g2 r5 _在理解Hadoop RPC整体架构的基础上, 依次阅读客户端部分代码和服务器端代码, 如果能够描述清楚下面两个流程, 则可认为
7 G$ A$ N9 f& ^& \对Hadoop RPC有了较为深入的理解。
, O; ~* q3 y! D0 l+ m❑客户端发送一个请求到接收到请求应答的整个过程是怎样的, 依次经过了哪些函数调用和通信过程;
4 K0 p1 ^& y" H8 ]3 V- z) c2 A❑多个客户端并发发送请求到服务器端后, 服务器端是如何处理的。
8 l3 ^, o1 C. ?2.服务库、 事件库和状态机
4 N5 }3 M. e! p. a' v了解服务库、 事件库和状态机库源代码所在目录可使读者省去许多麻烦。- y0 F' _- A/ I" @
❑服务库位于源代码目录hadoop-common-project/hadoop-common/src/main/java下的org.apache.hadoop.yarn.service包中。
~& I1 |& k' t0 d❑事件库和状态机位于源代码目录中hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java下的% o" B$ N6 H& ]
org.apache.hadoop.yarn.event和org.apache.hadoop.yarn.state两个包中。
: E! z( Q# M- y3 e4 J% z建议读者按照以下流程学习这部分源代码: 首先弄清楚各个包的对外接口, 然后尝试编写几个实例使用这几个库。 当然, 读
) y9 F6 `! U0 R; G) X( c9 n Y者也可以跟着YARN源代码学习这几个库, YARN源代码是这几个库的最好应用实例。
. w' [" }2 h: T- o- Y1 F3.7 小结
- ~5 u; }1 h0 [/ ^$ F" FYARN基础库是其他一切模块的基础, 它的设计直接决定了YARN的稳定性和扩展性, YARN借用了MRv1的一些底层基础* B* P9 M! ?" P. _% c
库, 比如RPC库等, 但因为引入了很多新的软件设计方式, 所以它的基础库更多, 包括直接使用了开源序列化框架Protocol) D1 b3 u( \5 P. m( I' Z
Buffers和Apache Avro, 自定义的服务库、 事件库和状态机等。 本章介绍了YARN最重要的几个基础库。8 |0 h! E: W# L) G
3.8 问题讨论
( [! f5 O0 v# U+ j' k! n! Y& X问题1: 引入Protocol Buffers之后, Hadoop RPC是否能像Thrift RPC或者Avro RPC那样具有跨语言特性, 比如Server采用Java编1 v4 k' p9 N: {5 ]0 X" R9 R3 h
写, Client采用C++编写?, U, s7 ~5 ^# i( z) u
问题2: 如果Hadoop RPC具备跨语言特性, 那么相比于Thrift或者Apache Avro, Hadoop RPC有什么优缺点? 如果不具备, 该
6 i* ~- G: }2 p! K如何让它具备跨语言特性呢?
) P8 d8 ~; L" \* x2 W问题3: Hadoop RPC具备跨语言特性后, 将带来哪些好处? & Z9 m2 g/ m* ~* D1 j
& J0 m5 x) X6 R: o; V! f
) r8 s: T7 \7 B- o, f; t8 n |
|