I am reading codes

Hadoop代码结构及载入Ecplise方法

Posted on By kennethxian

2018年3月10日源码共读

一、项目结构

在Hadoop代码结构中,按照功能的不同将项目划分到不同目录当中。

整个项目可以用maven进行构建,因此根目录下有pom.xml文件。

每个子目录也可作为独立的maven项目进行编译,因此每个子目录下也都有pom.xml。

Mapreduce、HDFS是Hadoop最主要的两个功能模块,这两个部分就分别放到了hadoop-mapreduce-project、hadoop-hdfs-project这两个目录当中。由于各子项目之间会使用些共同的基础功能,这部分基础功能的代码实现,在hadoop-common-project下。

主要子目录中的功能如下:

  • hadoop-common-project:Hadoop基本功能实现,包括安全认证、日志管理、配置管理、监控等。
  • hadoop-hdfs-project:HDFS功能实现。
  • hadoop-mapreduce-project:Mapreduce功能实现。
  • hadoop-yarn-project:Hadoop 2.x之后引入,集群资源管理框架Yarn的主要功能实现代码。
  • hadoop-client:Hadoop客户端(用于作业提交、文件上传下载等)功能实现。
  • hadoop-tool:第三方提供的一些工具,比如访问aliyun OSS的接口、访问aws的接口等等。

二、代码获取方法

如果只为研究目的,不考虑特殊版本需求的话,直接从apache的Hadoop官网https://hadoop.apache.org/releases.html下载一份最新的源代码。

或者,可以从github上获取:

git clone https://github.com/apache/hadoop.git

三、Eclipse项目生成及代码修改

maven的Eclipse插件可以用于生成eclipse项目文件(.classpath、.project),使得对应项目可以直接在Eclipse中打开。

在项目根目录下,可以执行:

mvn eclipse:eclipse

如上所述,Hadoop有多个子项目组成,在根目录中执行该项目之后,每个子目录都会生成单独的子项目。在Eclipse中打开就会同时载入所有子项目。

由于Hadoop项目比较大,一般会根据需要到某个子项目中执行Eclipse项目生成操作,比如:

[root@DX4-1 hadoop-2.7.2-src]# cd hadoop-common-project/
[root@DX4-1 hadoop-common-project]# mvn eclipse:eclipse

执行完成之后,可以在Eclipse中导入项目:

选择子项目所在的目录,并打开:

之后,便可以像平常查看普通Java项目那样,进行查找文件、跳转到定义处等操作了:

四、编译中可能遇到的问题

Hadoop的编译过程看似只需要mvn的命令启动一下即可,但过程中会对某些工具及项目有所依赖。

1、主要依赖的工具

  • ant
  • ant-trax
  • rpmdevtools
  • cmake
  • lzo-devel
  • openssl-devel
  • snappy-devel
  • forrest

如果是连上网络的一台Linux机器,装这些并不困难,在CentOS中使用yum install,在Ubuntu中使用apt-get install。

2、依赖的项目

Hadoop依赖于Google的Protobuf,需要下载、编译并安装Protobuf之后才能保证Hadoop的正确编译。

下载的链接:https://developers.google.com/protocol-buffers/docs/downloads。

需要根据需求下载正确的版本(比如Hadoop2.6.x、2.7.x需要Protobuf v2.5.0)。

解压之后,在Protobuf项目目录执行如下命令完成安装:

./configure
make
make install