使用Maven将Hadoop2.2.0源码编译成Eclipse项目
编译环境:
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项目的更多相关文章
- hadoop-2.6.0源码编译问题汇总
在上一篇文章中,介绍了hadoop-2.6.0源码编译的一般流程,因个人计算机环境的不同, 编译过程中难免会出现一些错误,下面是我编译过程中遇到的错误. 列举出来并附上我解决此错误的方法,希望对大家有 ...
- hadoop-2.6.0源码编译
运行hadoop环境时,常常会出现这种提示 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your plat ...
- Hadoop2.8.0 源码编译
一.下载源码并解压 二.检查以下几项 必须有网络!!! JDK 1.7+ 安装方法 java -version Maven 3.0 or later 安装方法 mvn -version Findbug ...
- Hadoop系列(一)hadoop2.2.0源码编译
操作系统:Centos 所需条件:能上网 编译所需工具: apache-ant-1.9.2-bin.tar.gz apache-maven-3.0.5-bin.tar.gz findbugs-2.0. ...
- Apache Flume 1.7.0 源码编译 导入Eclipse
前言 最近看了看Apache Flume,在虚拟机里跑了一下flume + kafka + storm + mysql架构的demo,功能很简单,主要是用flume收集数据源(http上报信息),放入 ...
- 编译hadoop2.2.0源码时报错
编译hadoop2.2.0源码时, mvn install -DskipTests 报错: [ERROR] COMPILATION ERROR : [INFO] ------------------- ...
- Spark1.0.0 源码编译和部署包生成
问题导读:1.如何对Spark1.0.0源码编译?2.如何生成Spark1.0的部署包?3.如何获取包资源? Spark1.0.0的源码编译和部署包生成,其本质只有两种:Maven和SBT,只不过针对 ...
- ambari 2.5.0源码编译安装
参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/index.html Ambari 是什么 Ambar ...
- hadoop-1.2.0源码编译
以下为在CentOS-6.4下hadoop-1.2.0源码编译步骤. 1. 安装并且配置ant 下载ant,将ant目录下的bin文件夹加入到PATH变量中. 2. 安装git,安装autoconf, ...
随机推荐
- php去除数组中重复数据
<?php /** * 去除数组中重复数据 * by www.jbxue.com **/ $input = array("a" => "green" ...
- 2.cadence制板流程[原创]
1.元器件库(原理图库) 2.原理图 3.DRC检查 4.输出网表 5.PCB封装 6.板子边框 7.导入网表 8.设置约束规则 9.布局,布线,铺铜 10.DRC检查,出丝印,钻孔,出广汇
- Objective-C 类的继承、方法的重写和重载
一.类的继承 Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序.Objec ...
- 第五讲:深入hibernate的三种状态
学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...
- Linux同步机制(一) - 线程锁
1 互斥锁 在线程实际运行过程中,我们经常需要多个线程保持同步. 这时可以用互斥锁来完成任务.互斥锁的使用过程中,主要有 pthread_mutex_init pthread_mutex_destor ...
- View Transform(视图变换)详解
http://www.cnblogs.com/graphics/archive/2012/07/12/2476413.html 什么是View Transform 我们可以用照相机的原理来阐释3D图形 ...
- tomcat启动时报:IOException while loading persisted sessions: java.io.EOFException的解决方案
错误代码如下: 严重: IOException while loading persisted sessions: java.io.EOFException java.io.EOFException ...
- hdu1051(LIS | Dilworth定理)
这题根据的Dilworth定理,链的最小个数=反链的最大长度 , 然后就是排序LIS了 链-反链-Dilworth定理 hdu1051 #include <iostream> #inclu ...
- Java中String 的equals 和==详解
一.Java中数据存储区域包括: 1.寄存器:最快的存储区,由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new ...
- 【第三篇】说说javascript处理时间戳
在做datagrid的时候,从数据库读出来的数据是/Date(1437705873240)/大概是这种形式,这个就是时间戳 我们需要把/Data和/去掉,才可以转成我们要的格式. 上代码 { fiel ...
