编译环境:

OS:RHEL 6.3 x64

Maven:3.2.1

Eclipse:Juno SR2 Linux x64

libprotoc:2.5.0

JDK:1.7.0_51 x64

步骤:

1. 下载Hadoop2.2.0源码包  http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0-src.tar.gz

2. 解压缩到Eclipse的workspace中。这里最好解压缩到workspace中,编译完成后直接导入就好了,不用移动,移动的话容易造成依赖关系的确实,我比较懒,所以就放在workspace中编译,省的还要build path。

3. 安装Maven。Hadoop前期使用的是ant+ivy,后面改成了Maven,在源码包的BUILD文件中有写。下载Maven  http://apache.fayea.com/apache-mirror/maven/maven-3/3.2.1/binaries/apache-maven-3.2.1-bin.tar.gz,解压缩到安装目录,在.bashrc中添加以下内容

export MAVEN_HOME=/root/Software/Maven321
export PATH=/root/Software/Maven321/bin:$PATH
在控制台中输入mvn -version,打印以下信息则安装成功
Apache Maven 3.2.1 (ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9; 2014-02-15T01:37:52+08:00)
Maven home: /root/Software/maven321
Java version: 1.7.0_51, vendor: Oracle Corporation
Java home: /usr/java/jdk1.7.0_51/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-431.5.1.el6.x86_64", arch: "amd64", family: "unix"

4. 安装protobuf-2.5.0,首先安装一下gcc

yum install gcc
yum install gcc-c++
然后下载protocbuf https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz 下载完成后解压到安装目录。进入安装目录执行如下命令进行安装
./configure
 make
 make check
 make install
安装完成后在控制台输入protoc --version,有以下输出则安装成功。安装protoc的原因是要用到它啦,并且官方文档里貌似也没提到,就是编译的时候遇到错误了。并且这里是要编译Eclipse项目,如果要编译成可执行的Hadoop的话需要安装更多的软件进行支持,详情可以见这里 http://my.oschina.net/cloudcoder/blog/192224
[root@dell ~]# protoc --version
libprotoc 2.5.0

5. 下面就可以开始编译了,进入到Hadoop2.2.0的源码包目录里,ls查看一下,可以看到hadoop-maven-plugins文件夹,先进入到这个文件家,执行mvn install。过程有点长,如果显示说有jar包下载不下来就多执行几次,总有下载下来的一天。显示BUILD SUCCESS后则返回到hadoop-2.2.0-src的根目录下,执行mvn eclipse:eclipse –DskipTests,生成Eclipse项目。同样,显示BUILD SUCCESS后就是编译成功了。

[root@dell hadoop-2.2.0-src]# ls
BUILDING.txt           hadoop-hdfs-project       hadoop-tools
dev-support            hadoop-mapreduce-project  hadoop-yarn-project
hadoop-assemblies      hadoop-maven-plugins      LICENSE.txt
hadoop-client          hadoop-minicluster        NOTICE.txt
hadoop-common-project  hadoop-project            pom.xml
hadoop-dist            hadoop-project-dist       README.txt

6. 将编译好的项目导入到Eclipse中,依次执行[File] > [Import] > [Existing Projects into Workspace]即可。由于生成了很多个项目,所以导入后是这个样子的。并且还会有一些错误,下面对如何修复错误写一下。

Error#1. hadoop-streaming里面的build path有问题,显示/root/workspace/hadoop-2.2.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/conf(missing)

解决办法,remove掉引用就好。

Error#2. hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSClientFailover.java中报sun.net.spi.nameservice.NameService错误,这是一个需要import的包,存在于openjdk中,在Oracle Jdk中没找到,需要下载一个。NameService是一个接口,在网上找一个NameService放到该包中就好。 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/sun/net/spi/nameservice/NameService.java#NameService

Error#3. /hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineEditsViewer/XmlEditsVisitor.java里面显示
import com.sun.org.apache.xml.internal.serialize.OutputFormat;

import com.sun.org.apache.xml.internal.serialize.XMLSerializer;

失败,这是由于Eclipse的强检查原则,打开Java -> Compiler -> Errors/Warnings and under "Deprecated and restricted API" change the setting of "Forbidden reference (access rules)" 将error级别调整到warning级别就好。

Error#4. /hadoop-common/src/test/java/org/apache/hadoop/io/serializer/avro/TestAvroSerialization.java显示没有AvroRecord类,在网上搜索到AvroRecord类放入到同级包中就行了。  http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-common/2.2.0/org/apache/hadoop/io/serializer/avro/AvroRecord.java#AvroRecord

Error#5. org.apache.hadoop.ipc.protobuf包是空的,需要在/hadoop-common/target/generated-sources/java中找到profobuf拷贝到/hadoop-common/src/test/java中就好了. 同时包里面还缺少了以下三个引用,在GrepCode上找一下,把hadoop-common2.2.0的相应文件下下来导入。

org.apache.hadoop.ipc.protobuf.TestProtos.EchoRequestProto;
org.apache.hadoop.ipc.protobuf.TestProtos.EchoResponseProto;
org.apache.hadoop.ipc.protobuf.TestRpcServiceProtos.TestProtobufRpcProto;

Error#6. /hadoop-auth/org/apache/hadoop/security/authentication/client/AuthenricatorTestCase.java中显示server.start()和server.stop()错误,还没找到原因所在,待检查~~~

使用Maven将Hadoop2.2.0源码编译成Eclipse项目的更多相关文章

  1. hadoop-2.6.0源码编译问题汇总

    在上一篇文章中,介绍了hadoop-2.6.0源码编译的一般流程,因个人计算机环境的不同, 编译过程中难免会出现一些错误,下面是我编译过程中遇到的错误. 列举出来并附上我解决此错误的方法,希望对大家有 ...

  2. hadoop-2.6.0源码编译

    运行hadoop环境时,常常会出现这种提示 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your plat ...

  3. Hadoop2.8.0 源码编译

    一.下载源码并解压 二.检查以下几项 必须有网络!!! JDK 1.7+ 安装方法 java -version Maven 3.0 or later 安装方法 mvn -version Findbug ...

  4. Hadoop系列(一)hadoop2.2.0源码编译

    操作系统:Centos 所需条件:能上网 编译所需工具: apache-ant-1.9.2-bin.tar.gz apache-maven-3.0.5-bin.tar.gz findbugs-2.0. ...

  5. Apache Flume 1.7.0 源码编译 导入Eclipse

    前言 最近看了看Apache Flume,在虚拟机里跑了一下flume + kafka + storm + mysql架构的demo,功能很简单,主要是用flume收集数据源(http上报信息),放入 ...

  6. 编译hadoop2.2.0源码时报错

    编译hadoop2.2.0源码时, mvn install -DskipTests 报错: [ERROR] COMPILATION ERROR : [INFO] ------------------- ...

  7. Spark1.0.0 源码编译和部署包生成

    问题导读:1.如何对Spark1.0.0源码编译?2.如何生成Spark1.0的部署包?3.如何获取包资源? Spark1.0.0的源码编译和部署包生成,其本质只有两种:Maven和SBT,只不过针对 ...

  8. ambari 2.5.0源码编译安装

    参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/index.html Ambari 是什么 Ambar ...

  9. hadoop-1.2.0源码编译

    以下为在CentOS-6.4下hadoop-1.2.0源码编译步骤. 1. 安装并且配置ant 下载ant,将ant目录下的bin文件夹加入到PATH变量中. 2. 安装git,安装autoconf, ...

随机推荐

  1. 非常非常非常好!path-sum-iii

    https://leetcode.com/problems/path-sum-iii/ 最终我还是没做出好的解法.还是看的别人的解法. 即使看了别人的解法,开始还实现错了. 还有很长的路要走. pac ...

  2. JAVA反射技术的使用

    前言 在开发html使用jquery提交post的时候,可以使用jquery遍历from元素里面的input元素实现参数组合,这样就不用手动打参数了,特别是在参数很多的时候,费神费时. 我开发Andr ...

  3. hdu1052(田忌赛马 贪心)

    好坑的一道题,不过确实是贪心的一道好题,想了好久一直无法解决平局的情况.  参考了别人的思路,然后结合了自己的想法,总算是想出来了. 这题有些步骤是必须要执行的,有四个步骤 一.当期状态田忌的最慢的马 ...

  4. c#调用系统资源大集合-1

    using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServi ...

  5. Qt之自定义搜索框

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 方案一:调用QLineEdit现有接口 void ...

  6. HDU 1158 Employment Planning【DP】

    题意:给出n个月,雇佣一个人所需的钱hire,一个人工作一个月所需要的钱salary,解雇一个人所需要的钱fire,再给出这n个月每月1至少有num[i]个人完成工作,问完成整个工作所花费的最少的钱是 ...

  7. 【转】很有用但鲜有人知的 Linux 命令

    Linux命令行吸引了大多数Linux爱好者.一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务.Linux命令和它们的转换对于Linux用户.Shell脚本程序员和管理员来说是最有 ...

  8. 设置sudo不输入密码 sudoers 编辑出错后的补救方法

    一 设置sudo为不需要密码 有时候我们只需要执行一条root权限的命令也要su到root,是不是有些不方便?这时可以用sudo代替.默认新建的用户不在sudo组,需要编辑/etc/sudoers文件 ...

  9. OK335xS Linux kernel check clock 24M hacking

    /****************************************************************************** * OK335xS Linux kern ...

  10. [Mac][MySQL]如何启动MySQL Server

    方法来自 MySQL 5.7官方手册 http://dev.mysql.com/doc/refman/5.7/en/osx-installation-launchd.html 有两种方法,另一种是命令 ...