java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2850|回复: 0

《深入解析YARN架构设计与实现原理》第1章 环境准备【1.3】

[复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2062

    主题

    3720

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66592

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2017-4-12 20:36:39 | 显示全部楼层 |阅读模式
    1.3 搭建Hadoop源代码阅读环境
    # i6 m% z* K) m7 C1.3.1 创建Hadoop工程
    * o% i; x; W# ]* w; J" C
    本节将介绍如何创建一个Hadoop源代码工程以方便阅读源代码。 总体上说, 目前存在两种Hadoop源代码阅读环境搭建方法, 分别是构建Maven工程和构
    5 Q8 |0 e$ X' x4 I9 `! a5 T8 G
    Java工程。 两种方法各有利弊: 前者可通过网络自动下载依赖的第三方库, 但源代码会被分散到多个工程中进而带来阅读上的不便; 后者可将所有源代码' i& z2 N7 ~0 Y3 m2 D9 |
    组织在一个工程中, 但需要自己添加依赖的第三方库, 大家可根据自己的喜好选择一种方法。 本节将依次介绍这两种方法。
    4 ~' o8 V8 V# t; G! H3 x
    1) 构建Maven工程
    2 E3 a9 ~- u- S- \通过
    Maven工程搭建Hadoop源代码阅读环境的步骤如下:5 p8 k7 `" ^7 @, o3 f
    步骤
    1 解压缩Hadoop源代码。" ~: o) ]" G, G% h- W  Z' ]3 {$ B
    将下载到的
    Hadoop源代码压缩包解压到工作目录下, 比如hadoop-2.0-src.tar.gz( 注意, 为了方便, 此处直接使用版本号2.0, 实际下载到的源代码版本号) ~# e$ h! P) `! z8 P0 z
    并不是这样的, 可能是
    2.2.0, 这样压缩包的名字实际为hadoop-2.2.0-src.tar.gz) 。1 }- c  K* x8 x8 J# k, I* I7 a
    步骤
    2 导入Maven工程。, w& r+ R% l* P6 d: d
    Eclipse中, 依次选择"File"→"Import"→"Maven"→"Existing Maven Project", 在弹出的对话框中的"Root Directory"后面, 选择Java源代码所在的目录。- c  A% X. S' z, |9 Y% j& F; G
    单击
    "Next"按钮, 在弹出的对话框中选择"Resolve All Later", 并单击"Finish"按钮完成Maven项目导入。 之后, Eclipse会自动通过网络从Maven库中下载依赖
    $ U& W# b; C1 u0 }  v: U. c的第三方库(
    JAR包等) 。 注意, 你所使用的电脑必须能够联网。
    * d$ C# L4 B4 {/ O% H0 n. m
    Hadoop 2.0源代码导入Maven项目后, 会生成50个左右的工程, 这些都是通过Maven构建出来的, 每个工程是一个代码模块, 且彼此相对独立, 可以单
    / Y" h  V; x* }. s* i/ L# H独编译。 你可以在某个工程下的
    "src/main/java"目录下查看对应的源代码。1 c( o/ M5 D! _. H
    2) 构建Java工程" s; C6 N1 d% E/ ^0 V+ t: E
    通过
    Java工程搭建Hadoop源代码阅读环境的步骤如下:
    ) N, V* i: c$ Q, g' `/ c6 a步骤
    1 解压缩Hadoop源代码。& q( k9 n5 L4 {2 D' [4 Z
    构建Maven工程中的步骤1类似。) I" L8 I" k) F5 A) c' U
    步骤
    2 新建Java工程。
    # \7 ~+ \! W+ k$ e) M* j8 S打开
    Eclipse, 进入Eclipse可视化界面后, 如图1-1所示, 依次单击"File"→"New"→"Java Project", 并在弹出的对话框中去掉"Use default location"前的勾号, 然) M, Q/ v1 o" d7 i% E
    后选择
    Hadoop安装目录的位置, 默认情况下, 工程名称与Hadoop安装目录名称相同, 用户可自行修改。 单击完成按钮, Hadoop源代码工程创建完毕。0 P2 d0 n# b# Y0 ]# x+ h# f& N
    1-1 新建Hadoop工程1 a- Y5 T- B& g6 Y4 e) X
    回到
    Eclipse主界面后, 打开新建的Hadoop工程, 可看到整个工程按图1-2所示组织代码: 按目录组织源代码, 且每个目录下以JAR包为单位显示各个Java
    ( v" I9 M5 Y# j/ D! _
    文件。+ u1 M' x1 q* ?" h; H- T
    1-2 Hadoop工程展示( 部分) 源代码方式& E, |5 N% L: u% \: P
    除了使用源代码压缩包导入
    Eclipse工程的方法外, 读者可也尝试直接从Hadoop SVN上导入Hadoop源代码。; o) _6 o7 w) R
    需要注意的是, 通过以上方法导入
    Hadoop 2.0源代码后, 很多类或者方法找不到对应的JAR包, 为了解决这个问题, 你需要将第三方JAR包导入工程中,
    3 J' ?! T' K6 @2 A) f如图
    1-3所示, 方法如下: 解压存放JAR包的压缩包, 然后右击Project名称, 在弹出的快捷菜单中选择"Properties"命令, 将会弹出一个界面, 然后在该界面中+ v4 q1 ?  x8 T
    依次选择
    "Java Build Path"→"Libraries"→"Add External JARs...", 将解压目录中share/hadoop目录下各个子目录中lib文件夹下的JAR包导入工程。* p4 N8 H) n" E; {; U! U0 A
    前面提到
    CDH版本将源代码和JAR包放到了一起, 因此, 如果使用CDH版本, 则直接按照上述方法将源代码导入Eclipse工程即可。
    5 m4 t3 y. }& q/ H$ t/ Q细心的读者在阅读源代码过程中仍会发现部分类或者函数无法找到, 这是因为
    Hadoop 2.0使用了Protocol Buffers定义了RPC协议, 而这些Protocol Buffers
    2 A) Z4 r0 g. \) @件在
    Maven编译源代码时才会生成对应的Java类, 因此若其他类在源代码中引用这些类则暂时无法找到, 解决方法是先编译Hadoop 2.0源代码再倒入Eclipse
    - {( f/ c. H9 ]) ~, K+ I- F( e程, 具体方法如下( 注意, 进行以下步骤之前, 需先完成
    1.6.1节中的准备工作) 。
    8 _+ y3 b0 I3 \1 g. y+ d首先, 使用以下命令安装
    Elicpse插件hadoop-maven-plugins  {' A% N. {7 [; T1 Y. Q
    1-3 导入依赖的第三方JAR6 ?! o1 ]$ d, {+ q# ~9 Q
    $ cd ${HADOOP_HOME}/hadoop-maven-plugins* N1 s3 [: r6 i! c3 f# e( D9 W
    $ mvn install
    6 o* X; J+ G; _. t; |% W然后生成Eclipse工程文件:0 k  b: O! u+ F. z
    $ cd ${HADOOP_HOME}
    1 X0 [: a3 p2 L3 @/ w: h/ \; l$ mvn eclipse:eclipse -DskipTests7 Y3 R0 J& c: [
    最后在Eclipse中按照以下流程导入源代码: "File"→"Import"→"Existing Projects into Workspace"1 t! }8 E! x6 D& h$ L9 o. ^; Q" o
    1.3.2 Hadoop源代码阅读技巧
    + q; J. X2 J) r6 C- [( U8 W/ Z2 q
    本节介绍在Eclipse下阅读Hadoop源代码的一些技巧, 比如: 如何查看一个基类有哪些派生类, 一个方法被其他哪些方法调用等。
    + ]+ B. h( }: |: T" ^
    1) 查看一个基类或接口的派生类或实现类
    - W8 k/ y! z0 d$ _) a# F% ~
    Eclipse中, 选中某个基类或接口名称, 右击, 在弹出的快捷菜单中选择"Quick Type Hierarchy", 可在新窗口中看到对应的所有派生类或实现类。' B6 G; w6 v! u% H
    例如, 如图
    1-4所示, 打开hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java目录下org.apache.hadoop.mapred包中的
    ' C% ]6 ]; b- J
    InputFormat.java文件, 查看接口InputFormat的所有实现类, 结果如图1-5所示。+ e1 d; h/ ]0 u4 s* X
    2) 查看函数的调用关系
    1 j5 a8 R4 S8 W) X: R! r
    Eclipse中, 选中某个方法名称, 右击, 在弹出的快捷菜单中选择"Open Call Hierarchy", 可在窗口"Call Hierarchy"中看到所有调用该方法的函数。. [4 V, ~. g' d
    1-4 Eclipse中查看Hadoop源代码中接口InputFormat的所有实现类6 |+ T, Y) }; H' B4 ?# L
    1-5 Eclipse列出接口InputFormat的所有实现类- U# ~0 r4 b6 h3 R
    例如, 如图
    1-6所示, 打开hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java目录下org.apache.hadoop.mapred包中的2 G  {+ K+ i+ F& u: U! L
    Task.java文件, 查看调用getJobID方法的所有函数, 结果如图1-7所示。
    1 c" Y7 o9 k( s5 f) _- _
    1-6 Eclipse中查看Hadoop源代码中所有调用Task.javagetJobID方法的函数9 V  Q& T* M, w( t+ H/ U
    1-7 Eclipse列出所有调用getJobID方法的函数
    + h' ^# z; @5 b9 Z7 n  \+ @5 A
    3) 快速查找类对象的相关信息
    0 f1 i0 B2 N) y& {" s与前两个小节类似, 选中类对象, 右击, 在弹出的快捷菜单中选择
    "Open Declaration", 可跳转到类定义; 选择"Quick Outline", 可查看类所有的成员变量
    ! C& k& U) N* K  `0 s% G和成员方法, 具体细节在此不做详细介绍, 读者自行尝试。
      
    0 U1 M/ [$ k0 _1 v! e% B8 S1 h8 r1 k" E  T* }

    ( G* e2 o' \& l0 A
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2025-2-23 12:43 , Processed in 0.408137 second(s), 34 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表