搭建Hadoop源代码阅读环境

本节将介绍如何创建一个Hadoop源代码工程以方便阅读源代码。总体上说,目前存在两种Hadoop源代码阅读环境搭建方法,分别是构建Maven工程和构建Java工程。两种方法各有利弊:前者可通过网络自动下载依赖的第三方库,但源代码会被分散到多个工程中进而带来阅读上的不便;后者可将所有源代码组织在一个工程中,但需要自己添加依赖的第三方库,大家可根据自己的喜好选择一种方法。本节将依次介绍这两种方法。

(1)构建Maven工程

通过Maven工程搭建Hadoop源代码阅读环境的步骤如下:

步骤1 解压缩Hadoop源代码。

将下载到的Hadoop源代码压缩包解压到工作目录下,比如hadoop-2.0-src.tar.gz(注意,为了方便,此处直接使用版本号2.0,实际下载到的源代码版本号并不是这样的,可能是2.2.0,这样压缩包的名字实际为hadoop-2.2.0-src.tar.gz)。

步骤2 导入Maven工程。

在Eclipse中,依次选择“File”→“Import”→“Maven”→“Existing Maven Project”,在弹出的对话框中的“Root Directory”后面,选择Java源代码所在的目录。

单击“Next”按钮,在弹出的对话框中选择“Resolve All Later”,并单击“Finish”按钮完成Maven项目导入。之后,Eclipse会自动通过网络从Maven库中下载依赖的第三方库(JAR包等)。注意,你所使用的电脑必须能够联网。

将Hadoop 2.0源代码导入Maven项目后,会生成50个左右的工程,这些都是通过Maven构建出来的,每个工程是一个代码模块,且彼此相对独立,可以单独编译。你可以在某个工程下的“src/main/java”目录下查看对应的源代码。

(2)构建Java工程

通过Java工程搭建Hadoop源代码阅读环境的步骤如下:

步骤1 解压缩Hadoop源代码。

同“构建Maven工程”中的步骤1类似。

步骤2 新建Java工程。

打开Eclipse,进入Eclipse可视化界面后,如图1-1所示,依次单击“File”→“New”→ “Java Project”,并在弹出的对话框中去掉“Use default location”前的勾号,然后选择Hadoop安装目录的位置,默认情况下,工程名称与Hadoop安装目录名称相同,用户可自行修改。单击“完成”按钮,Hadoop源代码工程创建完毕。
搭建Hadoop源代码阅读环境_第1张图片
 

回到Eclipse主界面后,打开新建的Hadoop工程,可看到整个工程按图1-2所示组织代码:按目录组织源代码,且每个目录下以JAR包为单位显示各个Java文件。
搭建Hadoop源代码阅读环境_第2张图片
 

除了使用源代码压缩包导入Eclipse工程的方法外,读者可也尝试直接从Hadoop SVN上导入Hadoop源代码。

需要注意的是,通过以上方法导入Hadoop 2.0源代码后,很多类或者方法找不到对应的JAR包,为了解决这个问题,你需要将第三方JAR包导入工程中,如图1-3所示,方法如下:解压存放JAR包的压缩包,然后右击Project名称,在弹出的快捷菜单中选择“Properties”命令,将会弹出一个界面,然后在该界面中依次选择“Java Build Path”→ “Libraries”→“Add External JARs...”,将解压目录中share/hadoop目录下各个子目录中lib文件夹下的JAR包导入工程。

前面提到CDH版本将源代码和JAR包放到了一起,因此,如果使用CDH版本,则直接按照上述方法将源代码导入Eclipse工程即可。

细心的读者在阅读源代码过程中仍会发现部分类或者函数无法找到,这是因为Hadoop 2.0使用了Protocol Buffers定义了RPC协议,而这些Protocol Buffers文件在Maven编译源代码时才会生成对应的Java类,因此若其他类在源代码中引用这些类则暂时无法找到,解决方法是先编译Hadoop 2.0源代码再倒入Eclipse工程,具体方法如下(注意,进行以下步骤之前,需先完成1.6.1节中的准备工作)。
搭建Hadoop源代码阅读环境_第3张图片
 

首先,使用以下命令安装Elicpse插件hadoop-maven-plugins:

$ cd ${HADOOP_HOME}/hadoop-maven-plugins

$ mvn install

然后生成Eclipse工程文件:

$ cd ${HADOOP_HOME}

$ mvn eclipse:eclipse -DskipTests

最后在Eclipse中按照以下流程导入源代码:“File” → “Import”→ “Existing Projects into Workspace”。

你可能感兴趣的:(Hadoop)