|
3.6 源代码阅读引导, [8 `8 J* b$ C6 r) s
为了帮助读者更好地阅读源代码, 笔者特意安排了本节。 下面我们分两部分对读者进行指导。
1 p( i% u+ ~. d: v* z0 e2 k1.Hadoop RPC
0 ~3 }6 `( f$ [2 P1 r! O) oHadoop RPC内部实现位于源代码目录中hadoop-common-project/hadoop-common/src/main/java下的org.apache.hadoop.ipc包中, 而
4 S) B/ O) N4 N/ q. r0 e1 WYARN对RPC的Protocol Buffers封装则位于hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java目录下的; y% r8 H: i* _8 i V$ Y. \
org.apache.hadoop.yarn.ipc包中。 建议读者按照以下流程学习这部分源代码: 首先尝试使用Hadoop RPC编写一个C/S服务器, 然后
% h7 C/ x6 M) d在理解Hadoop RPC整体架构的基础上, 依次阅读客户端部分代码和服务器端代码, 如果能够描述清楚下面两个流程, 则可认为
3 P7 T% i( n. p |! l2 ?对Hadoop RPC有了较为深入的理解。
: n* l8 M- k* C$ {& J/ U5 J❑客户端发送一个请求到接收到请求应答的整个过程是怎样的, 依次经过了哪些函数调用和通信过程;5 q5 I: ^, I0 F7 P1 `
❑多个客户端并发发送请求到服务器端后, 服务器端是如何处理的。5 m" b; @8 x9 f1 ?; |
2.服务库、 事件库和状态机2 ?- j' _" t% J. \
了解服务库、 事件库和状态机库源代码所在目录可使读者省去许多麻烦。3 G9 c6 [) G F! W( x# L7 K! ]) X
❑服务库位于源代码目录hadoop-common-project/hadoop-common/src/main/java下的org.apache.hadoop.yarn.service包中。
5 F; F# V9 d& M" W- _7 H3 h❑事件库和状态机位于源代码目录中hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java下的& V3 p% m. n! _" i
org.apache.hadoop.yarn.event和org.apache.hadoop.yarn.state两个包中。% Z( I: t: L3 p! w
建议读者按照以下流程学习这部分源代码: 首先弄清楚各个包的对外接口, 然后尝试编写几个实例使用这几个库。 当然, 读: j: @3 W; J% _8 B& ~
者也可以跟着YARN源代码学习这几个库, YARN源代码是这几个库的最好应用实例。
: J/ T/ i& t) L& F- ^' I) y3.7 小结
- s- S# B6 S& d& q5 e7 z! HYARN基础库是其他一切模块的基础, 它的设计直接决定了YARN的稳定性和扩展性, YARN借用了MRv1的一些底层基础
f- p. F7 [$ S3 w p" s# a库, 比如RPC库等, 但因为引入了很多新的软件设计方式, 所以它的基础库更多, 包括直接使用了开源序列化框架Protocol
9 S% x) ~7 |- Q+ F# Y5 PBuffers和Apache Avro, 自定义的服务库、 事件库和状态机等。 本章介绍了YARN最重要的几个基础库。
4 b T" a7 c" N, }3.8 问题讨论
' ~2 u/ Y7 k3 l. h& F/ k1 \; W问题1: 引入Protocol Buffers之后, Hadoop RPC是否能像Thrift RPC或者Avro RPC那样具有跨语言特性, 比如Server采用Java编7 m6 V; A3 Y- H) g: J8 S, }+ K
写, Client采用C++编写?
0 b; w8 Z8 ]3 C7 i问题2: 如果Hadoop RPC具备跨语言特性, 那么相比于Thrift或者Apache Avro, Hadoop RPC有什么优缺点? 如果不具备, 该
2 n# {( z9 l1 V3 m3 M( U7 v& k9 v如何让它具备跨语言特性呢?4 d! }8 F. l. T$ H& V
问题3: Hadoop RPC具备跨语言特性后, 将带来哪些好处?
2 t; P1 I$ s& }# _9 s
! C2 I4 _: I3 ]6 a# f# Q; P7 S: W
|
|