配置 eclipse 编译、开发 Hadoop(MapReduce)源代码

本文不是面向 HDFS 或 MapReduce 的配置使用,而是面向 Hadoop 本身的开发。进行开发的前提是配置好开发环境,即获取源代码并首先能够顺畅编译,本文即记录了在 Linux(Ubuntu 10.10)上配置 eclipse 编译 Hadoop 源代码的过程。

开发 Hadoop 应该基于哪个版本的源代码呢?一种选择是通过 SVN 同步跟踪最新源代码,另一种选择是选择某个较新的稳定的 release 版本。如果是改进 Hadoop 本身,通常选择前者(比如对 SVN 源有写权限的 Hadoop 核心开发人员);如果是基于 Hadoop 开发其他产品,则通常选择后者,且只需在 Hadoop 有新的稳定版本发布时才更新产品使之兼容。下面对两种情况下 eclipse 的配置方法分别予以介绍。

一、通过 SVN 同步跟踪最新版本

1. 安装 Java 开发工具(JDK)

Eclipse、Hadoop都使用Java开发,所以我们首先需要JDK,执行如下命令行:

$ sudo apt-get install openjdk-6-jdk

2. 安装 Eclipse

推荐开发环境选用 eclipse,直接从http://www.eclipse.org/downloads  下载最新版 Eclipse IDE for Java Developers,本地解压缩即可使用。

3. 安装 Subclipse(Eclipse 的 SVN 插件)

用于从 Hadoop 获得源代码。我们使用 eclipse 自带的软件安装功能,通过 Subclipse 提供的地址自动下载安装该插件。

  • 首先访问http://subclipse.tigris.org ,在Download and Install页面找到与Eclipse版本合适的Subclipse版本,最新为1.6,将其Eclipse update site URL(即http://subclipse.tigris.org/update_1.6.x)复制下来;
  • 然后打开 eclipse 的菜单 Help > Install New Software,单击 Add 按钮,填入刚才复制的安装地址(即 http://subclipse.tigris.org/update_1.6.x),可将该地址取名为subclipse;点击OK回到 Install 窗口,选择 Subclipse,而后按 Next 逐步安装。
  • 此外,还需安装 SVN 所需的 JavaHL,执行如下命令行:
        $ sudo apt-get install libsvn-java  

4. 下载 Hadoop(MapReduce)源代码

Hadoop 源代码共包括 common、hdfs(分布式文件系统)、mapred(MapReduce) 三部分,各自的 SVN 地址如下:

http://svn.apache.org/repos/asf/hadoop/common

http://svn.apache.org/repos/asf/hadoop/hdfs

http://svn.apache.org/repos/asf/hadoop/mapreduce

【注意】三个项目有依赖关系,common 是后两者的公共组件,mapred 则是基于 hdfs,但这些依赖关系已经处理好,无需开发者关心,三个项目可分别独立下载、编译 。

  • 在 eclipse 中,单击菜单 File > Import,选择 SVN > 从 SVN 检出项目,单击 Next 按钮进入下一步;
  • 选中“创建新的资源库位置”,单击 Next 按钮后输入上述对应部分的地址,然后只选中 trunk 文件夹;
  • 下一步选择“作为新项目检出,并使用新建项目向导进行配置”,不要选择“作为工作空间中的项目检出”,因为无法选择项目类型;点击 Finish 按钮进入 New Project 向导;
  • 选择项目类型为 Java Project,取好项目名称,JRE最好选1.6,点击 Next 按钮,进入 Java Setting 窗口;
  • 将 Default output folder 由 .../bin 更改为 .../build/eclipse-classes(或其他),以免 eclipse 自动清空 bin 文件夹下手工编写的文件;点击 Finish 按钮等待下载完成。

此时会有很多文件标有红色叉号,属正常现象,后面我们使用 ant 编译出配套的 eclipse 项目文件则可消除这些错误。

5. 设置使用 Ant Builder 进行编译

以 mapred 部分为例,设上步新建的项目为 MapReduce.

  • 右键单击该项目(或从 Project 菜单下)选择 Properties,找到 Builders 选项卡,取消勾选 Java Builder,单击 New 按钮选择 Ant Builder,进入 Edit Configuration 窗口;
  • 初始为 Main 选项卡,Name栏可设置名称 MapReduce_Builder(或其他),Buildfile栏通过 Browse Workspace 按钮选择 MapReduce 项目下的 build.xml 文件;
  • 而后切换到 Targets 选项卡,单击 Manual Build 栏的 Set Targets 按钮,除了默认选项 compile 外,勾选 compile-test-system 和 eclipse(自动生成eclipse项目文件);如果查找不便可勾选下方 Sort targets(按名称字母序)和 Hide internal targets.

确认后项目即开始进行编译(时间较长),可以看到控制台(Console)有各种输出,期间会自动下载若干文件。

完成后右键单击项目,选择 Refresh(或按 F5 键),可以看到项目组织结构发生了变化,原有的红色叉号也消失了。

【注意】由于项目规模较大,在第一边编译完成后,可在 Project 菜单下取消勾选 Build Automatically.

二、基于稳定的 Release 版本【存在问题】

1. 安装 Java 开发工具(JDK)

Eclipse、Hadoop都使用Java开发,所以我们首先需要JDK,执行如下命令行:

$ sudo apt-get install openjdk-6-jdk

2. 安装 Eclipse

推荐开发环境选用 eclipse,直接从 http://www.eclipse.org/downloads  下载最新版 Eclipse IDE for Java Developers,本地解压缩即可使用。

3. 下载较新的 Release 版本

Hadoop 源代码共包括 common、hdfs(分布式文件系统)、mapred(MapReduce) 三部分,相互之间存在依赖关系——common 是后两者的公共组件,mapred 则是基于 hdfs,但这些依赖关系已经处理好,无需开发者关心,三个项目可分别独立编译 。这里还是以 MapReduce 为例,访问 http://hadoop.apache.org/mapreduce/releases.html  下载最新 Release 版本,目前是 0.21.0,下载后解压缩。

4. 新建 Java 项目并导入源代码

  • 在 eclipse 中,单击菜单 File > New > Java Project 新建 Java 项目,取好项目名称,注意 JRE 栏选择 Java-SE1.6,然后单击 Next 按钮,进入 Java Setting 窗口;
  • 将 Default output folder 由 .../bin 更改为 .../build/eclipse-classes(或其他),以免 eclipse 自动清空 bin 文件夹下手工编写的文件;点击 Finish 按钮完成新建 Java 项目。
  • 右键单击新建的项目(或从 File 菜单下)选择 Import,选中 General 下的 File System,点击 Next 按钮;
  • 通过 Browse 按钮定位到第 3 步解压缩的地址,可以只选择 mapred 文件夹(仅编译/开发 MapReduce),单击 Finish 按钮。

5. 设置使用 Ant Builder 进行编译

基本同第一部分第 5 步,编译的 Targets 选择 compile 和 eclipse-files 即可。

【遇到impossible to resolve dependencies问题,如何解决?】

ivy-resolve-common:
 [ivy:resolve] :: problems summary ::
 [ivy:resolve] :::: WARNINGS
 [ivy:resolve]         module not found: org.apache.hadoop#hadoop-common;0.21.0
 [ivy:resolve]     ==== apache-snapshot: tried
 [ivy:resolve]      https://repository.apache.org/content/repositories/snapshots/org/apache/hadoop/hadoop-common/0.21.0/hadoop-common-0.21.0.pom
 [ivy:resolve]       -- artifact org.apache.hadoop#hadoop-common;0.21.0!hadoop-common.jar:
 [ivy:resolve]      https://repository.apache.org/content/repositories/snapshots/org/apache/hadoop/hadoop-common/0.21.0/hadoop-common-0.21.0.jar
 [ivy:resolve]     ==== maven2: tried
 [ivy:resolve]       http://repo1.maven.org/maven2/org/apache/hadoop/hadoop-common/0.21.0/hadoop-common-0.21.0.pom
 [ivy:resolve]       -- artifact org.apache.hadoop#hadoop-common;0.21.0!hadoop-common.jar:
 [ivy:resolve]       http://repo1.maven.org/maven2/org/apache/hadoop/hadoop-common/0.21.0/hadoop-common-0.21.0.jar
 [ivy:resolve]         module not found: org.apache.hadoop#hadoop-common-test;0.21.0
 [ivy:resolve]         ::::::::::::::::::::::::::::::::::::::::::::::
 [ivy:resolve]         ::          UNRESOLVED DEPENDENCIES         ::
 [ivy:resolve]         ::::::::::::::::::::::::::::::::::::::::::::::
 [ivy:resolve]         :: org.apache.hadoop#hadoop-common;0.21.0: not found
 [ivy:resolve]         :: org.apache.hadoop#hadoop-common-test;0.21.0: not found
 [ivy:resolve]         :: org.apache.hadoop#hadoop-hdfs;0.21.0: not found
 [ivy:resolve]         ::::::::::::::::::::::::::::::::::::::::::::::
 [ivy:resolve]
 [ivy:resolve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS

BUILD FAILED
/home/basicthinker/workspace/MapReduce-0.21.0/build.xml:1861: impossible to resolve dependencies:
    resolve failed - see output for details

posted @ 2012-03-05 17:06  vivianC  阅读(1232)  评论(1编辑  收藏  举报