|
3.6 源代码阅读引导! J4 C; x/ A8 f8 w& S1 A6 R
为了帮助读者更好地阅读源代码, 笔者特意安排了本节。 下面我们分两部分对读者进行指导。2 W& Y2 x3 q: U" C
1.Hadoop RPC) j! Y! I$ D, r8 l3 x+ u
Hadoop RPC内部实现位于源代码目录中hadoop-common-project/hadoop-common/src/main/java下的org.apache.hadoop.ipc包中, 而* c, d4 i q8 e) S- }# S
YARN对RPC的Protocol Buffers封装则位于hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java目录下的
" \" U: u! g, a# U, v* dorg.apache.hadoop.yarn.ipc包中。 建议读者按照以下流程学习这部分源代码: 首先尝试使用Hadoop RPC编写一个C/S服务器, 然后4 r n" p& @0 k4 w8 L- f2 _& p$ _
在理解Hadoop RPC整体架构的基础上, 依次阅读客户端部分代码和服务器端代码, 如果能够描述清楚下面两个流程, 则可认为
! N7 s% e4 D" V对Hadoop RPC有了较为深入的理解。4 B0 r0 V; ?) Q# d& G
❑客户端发送一个请求到接收到请求应答的整个过程是怎样的, 依次经过了哪些函数调用和通信过程;
" z+ h* P" @7 E! X0 @❑多个客户端并发发送请求到服务器端后, 服务器端是如何处理的。. z. T# b2 D! W/ o8 }
2.服务库、 事件库和状态机
% f- ]! x& i0 t% A了解服务库、 事件库和状态机库源代码所在目录可使读者省去许多麻烦。' F, P9 ^9 _# G! }
❑服务库位于源代码目录hadoop-common-project/hadoop-common/src/main/java下的org.apache.hadoop.yarn.service包中。+ v8 c" m1 d7 c4 u8 o) R4 L
❑事件库和状态机位于源代码目录中hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java下的! F! _" T2 K4 {; T: r5 ?4 K
org.apache.hadoop.yarn.event和org.apache.hadoop.yarn.state两个包中。
5 u* c- w* g f) p( L" ?建议读者按照以下流程学习这部分源代码: 首先弄清楚各个包的对外接口, 然后尝试编写几个实例使用这几个库。 当然, 读 ^. E+ n$ q6 y! x* E; C) Z
者也可以跟着YARN源代码学习这几个库, YARN源代码是这几个库的最好应用实例。
2 |( w2 g& S. U# d. D3.7 小结# |# g) v. g0 c% _0 i
YARN基础库是其他一切模块的基础, 它的设计直接决定了YARN的稳定性和扩展性, YARN借用了MRv1的一些底层基础
! W# T3 A6 w9 o" r: A库, 比如RPC库等, 但因为引入了很多新的软件设计方式, 所以它的基础库更多, 包括直接使用了开源序列化框架Protocol# t! {+ U4 e4 l) Q
Buffers和Apache Avro, 自定义的服务库、 事件库和状态机等。 本章介绍了YARN最重要的几个基础库。
. a( A! _# k+ ^( A. A3.8 问题讨论+ V" Z7 o, A: P4 Y* ~8 P( m
问题1: 引入Protocol Buffers之后, Hadoop RPC是否能像Thrift RPC或者Avro RPC那样具有跨语言特性, 比如Server采用Java编
7 w2 |7 w( u, i# X6 b写, Client采用C++编写?; W! l( N$ I5 F. y$ j1 ~+ n" t' c
问题2: 如果Hadoop RPC具备跨语言特性, 那么相比于Thrift或者Apache Avro, Hadoop RPC有什么优缺点? 如果不具备, 该4 s4 P8 G" O0 T3 |0 r0 ~! W! m
如何让它具备跨语言特性呢?
$ q+ b! u! e7 q8 _( n8 a& c问题3: Hadoop RPC具备跨语言特性后, 将带来哪些好处? 0 c$ l3 M% o' d' W4 L
8 m6 v9 w1 S3 a+ Z0 B' Z+ F2 i4 Q" p _5 I1 |0 ?
|
|