Eclipse中导入Hadoop源代码工程
本节将介绍如何创建一个Hadoop源代码工程以方便阅读源代码. Hadoop源代码hadoop-2.7.3-src不能直接导入Eclipse,会报很多错,因为该源代码工程没有包含它所需的所有JAR包等, 需要Maven编译引入.
首先,介绍一下我自己成功的办法. ( 后面会介绍书上的办法,不过书上的办法会出错,大家仅做参考)
我们可以参考hadoop2.7.3源码编译eclipse项目
还可以看hadoop-2.7.3-src下的BUILDING.txt文件, 该文件教你如何构建Hadoop项目.如下所示:
---------------------------------------------------------------------------------- Importing projects to eclipse # 在源代码目录下, 我的源代码是在 /usr/local/hadoop-2.7.3-src $ su root # 这是我添加的, 用root权限 When you import the project to eclipse, install hadoop-maven-plugins at first. $ cd hadoop-maven-plugins $ mvn install Then, generate eclipse project files. $ cd .. # 这是我添加的 $ mvn eclipse:eclipse -DskipTests At last, import to eclipse by specifying the root directory of the project via [File] > [Import] > [Existing Projects into Workspace]. ----------------------------------------------------------------------------------
具体操作: ( mvn时需要使用root权限,即县切换到root用户,用命令su root )
第一步:
$ su root
不这样做很容易因为权限之类的问题导致mvn失败. 而且即使mvn 显示成功,也可能是错的,如我碰到过这种情况,即mvn时没花费多长时间就显示BUILD SUCCESS, 但是它并没有下载东西, 导入Eclipse会出现各种错误. 正确的是第一次mvn是会下载很多东西,花很长时间.
第二步:
$ cd ${HADOOP_HOME}/hadoop-maven-plugins // 这一步的HADOOP_HOME表示hadoop-2.7.3-src所在的目录, 比如我的是在 /home/hadoop/hadoop-2.7.3-src $ mvn install // 这一步会下载很多东西( JAR包或 .pom 文件等 ) , 等一段时间
第三步:
$ cd ${HADOOP_HOME} $ mvn eclipse:eclipse -DskipTests // 这一步会下载很多东西( JAR包或 .pom 文件等 ) , 等一段时间
成功的话, 会显示 BUILD SUCCESS .
到这一步,准备工作做好了,接下来将源代码该导入Eclipse, 方法是: "File" --> "Import" --> "Existing Projects into Workspace" . 如下图所示:
最后项目名称是hadoop-main, 结果如下图所示:
我看书上介绍,总体上说,目前存在两种Hadoop源代码阅读环境搭建方法,分别是构建Maven工程和构建Java工程.两种方法各有利弊:前者可通过网络自动下载依赖的第三方库,但源代码会被分散到多个工程中进而带来阅读上的不便; 后者可将所有源代码组织在一个工程中,但需要自己添加依赖的第三方库,大家可根据自己的喜好选择一种方法.本节将依次介绍这两种方法.(书上介绍的办法不太好用,会出现错误
1. 构建Maven工程
Maven 是根据pom.xml进行编译的,只要文件中包含pom.xml, 就可编译成单独的项目.
通过Maven工程搭建Hadoop源代码阅读环境的步骤如下:
步骤1 解压缩Hadoop源代码.
将下载到的Hadoop源代码压缩包解压到工作目录下,比如 hadoop-2.7.3-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.7.3源代码导入Maven项目后,会生成50个左右的工程,这些都是通过Maven构建出来的,每个工程是一个代码模块,且彼此相对独立,可以单独编译. 你可以在某个工程下的"src/main/java" 目录下查看相应的源代码.
(我导入之后,还有很多错误,原因未知)
2. 构建Java工程
通过Java工程搭建Hadoop源代码阅读环境的步骤如下:
步骤1 解压缩Hadoop源代码
同"构建Maven工程" 中的步骤1类似.
步骤2 新建Java工程
打开Eclipse, 进入Eclipse可视化界面后,如图1所示, 依次单击"File" --> "New" --> "Java Project", 并在弹出的对话框中去掉"Use default location" 前的勾号, 然后选择Hadoop安装目录的位置,默认情况下,工程名称与Hadoop安装目录名称相同,用户可自行修改. 单击"完成"按钮, Hadoop 源代码工程创建完毕.
图1 新建Hadoop工程
回到Eclipse主界面后,打开新建的Hadoop工程,可看到整个工程按图2所示组织代码: 按目录组织源代码,且每个目录下以JAR包为单位显示各个Java文件.
图2 Hadoop工程展示(部分)源代码方式
除了使用源代码压缩包导入Eclipse工程的方法外,读者可尝试直接从Hadoop SVN上导入Hadoop源代码.
需要注意的是,通过以上方法导入Hadoop 2.7.3 源代码后,很多类或着方法找不到对应的JAR包, 为了解决这个问题,你需要将第三方JAR包导入到工程中,如图3所示,方法如下:解压存放JAR包的压缩包(即hadoop-2.7.3.tar.gz), 然后右击Project名称,在弹出的快捷菜单中选择"Properties" 命令, 将会弹出一个界面,然后在该界面依次选择 "Java Build Path" --> "Libraries" --> "Add External JARs..." , 将解压目录中的share/hadoop 目录下各个子目录的中lib文件夹下的JAR包导入工程.
图3 导入依赖的第三方JAR包 (我们以project2017为例,类似)
前面提到CDH版本将源代码和JAR包放在了一起,因此,如果使用CDH版本,则直接按照上述方法将源码导入Eclipse工程即可.
细心的读者在阅读源代码的过程中仍然会发现部分类或者函数无法找到,这是因为Hadoop 2.7.3 使用了Protocol Buffers定义了RPC协议, 而这些Protocol Buffers文件在Maven编译源代码时才会生成对应的Java类,因此若其他类在源代码中引用这些类则暂时无法找到,解决办法是先编译Hadoop 2.7.3 源代码再导入到Eclipse工程,具体方法如下.
首先,使用以下命令安装Eclipse插件hadoop-maven-plugins:
$ cd ${HADOOP_HOME}/hadoop-maven-plugins
$ mvn install
然后生成Eclipse工程文件:
$ cd ${HADOOP_HOME}
$ mvn eclipse:eclipse -DskipTests