zoukankan      html  css  js  c++  java
  • 配置 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

  • 相关阅读:
    android 中文 api (43) —— Chronometer
    SVN客户端清除密码
    Android 中文 API (35) —— ImageSwitcher
    Android 中文API (46) —— SimpleAdapter
    Android 中文 API (28) —— CheckedTextView
    Android 中文 API (36) —— Toast
    Android 中文 API (29) —— CompoundButton
    android 中文 API (41) —— RatingBar.OnRatingBarChangeListener
    Android 中文 API (30) —— CompoundButton.OnCheckedChangeListener
    Android 中文 API (24) —— MultiAutoCompleteTextView.CommaTokenizer
  • 原文地址:https://www.cnblogs.com/viviancc/p/2380699.html
Copyright © 2011-2022 走看看