|
3.6 源代码阅读引导
( R, X: N; _' ?4 Q# B6 T% b) [为了帮助读者更好地阅读源代码, 笔者特意安排了本节。 下面我们分两部分对读者进行指导。
" _( R- [1 s: t& j* ^# w6 ]3 F4 A7 X1.Hadoop RPC
8 E* e, _% b% w% a1 QHadoop RPC内部实现位于源代码目录中hadoop-common-project/hadoop-common/src/main/java下的org.apache.hadoop.ipc包中, 而
Y( M, ^- p* G' ^ K: YYARN对RPC的Protocol Buffers封装则位于hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java目录下的
! C b0 ]; I! m& _2 h+ h6 C9 T# }2 w( yorg.apache.hadoop.yarn.ipc包中。 建议读者按照以下流程学习这部分源代码: 首先尝试使用Hadoop RPC编写一个C/S服务器, 然后6 \6 J D) f5 E) c1 I( c( C6 [6 p
在理解Hadoop RPC整体架构的基础上, 依次阅读客户端部分代码和服务器端代码, 如果能够描述清楚下面两个流程, 则可认为
5 |1 ?$ p. [$ n# p对Hadoop RPC有了较为深入的理解。; U& {. s: _# a s7 t4 h; i
❑客户端发送一个请求到接收到请求应答的整个过程是怎样的, 依次经过了哪些函数调用和通信过程;; [, H. k! z J" i$ ?
❑多个客户端并发发送请求到服务器端后, 服务器端是如何处理的。
& r" O2 ~0 K; z- f2.服务库、 事件库和状态机: l& s# M, h ~8 @+ V; s. z% y
了解服务库、 事件库和状态机库源代码所在目录可使读者省去许多麻烦。3 Z" z8 N$ m' w$ i! A
❑服务库位于源代码目录hadoop-common-project/hadoop-common/src/main/java下的org.apache.hadoop.yarn.service包中。1 D# I; K* n6 K* c/ _4 [3 E* a
❑事件库和状态机位于源代码目录中hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java下的! `* I" w; }7 p( |" v3 N
org.apache.hadoop.yarn.event和org.apache.hadoop.yarn.state两个包中。
. h8 C# F$ L( ?6 K8 P# T建议读者按照以下流程学习这部分源代码: 首先弄清楚各个包的对外接口, 然后尝试编写几个实例使用这几个库。 当然, 读
4 Z( X! k, O' m- e者也可以跟着YARN源代码学习这几个库, YARN源代码是这几个库的最好应用实例。
! N3 l; F: M( d9 f: r" M- J8 a2 \3.7 小结% ?' E1 V1 n" w( u- _" K
YARN基础库是其他一切模块的基础, 它的设计直接决定了YARN的稳定性和扩展性, YARN借用了MRv1的一些底层基础1 I; ]' J1 u2 h8 S
库, 比如RPC库等, 但因为引入了很多新的软件设计方式, 所以它的基础库更多, 包括直接使用了开源序列化框架Protocol u0 Y' R# m& O) i
Buffers和Apache Avro, 自定义的服务库、 事件库和状态机等。 本章介绍了YARN最重要的几个基础库。
5 E' T9 \( ~( W1 ?2 {3.8 问题讨论0 J+ Y$ V. m7 m: F8 R" p
问题1: 引入Protocol Buffers之后, Hadoop RPC是否能像Thrift RPC或者Avro RPC那样具有跨语言特性, 比如Server采用Java编
0 x. a0 _. q4 \' C$ l写, Client采用C++编写?
8 M# y3 L# _# q2 }9 W! G6 ~问题2: 如果Hadoop RPC具备跨语言特性, 那么相比于Thrift或者Apache Avro, Hadoop RPC有什么优缺点? 如果不具备, 该
& r0 V3 K8 [ c; C! D1 {如何让它具备跨语言特性呢?
# j) O5 k/ p: j% Q, h* N问题3: Hadoop RPC具备跨语言特性后, 将带来哪些好处? 6 W. n0 ~* \7 E# f B6 X4 r
6 H9 C( g2 w. j2 j1 [/ A$ T
" \) n3 B5 S7 y/ q1 R! p- D* M+ B |
|