ant编译hadoop
‘壹’ 如何在CentOS6.5下编译64位的Hadoop2.x
1,安装gcc,执行如下的几个yum命令即可
java代码
yum -y install gcc
yum -y install gcc-c++
yum install make
yum install autoconf automake libtool cmake ncurses-devel openssl-devel gcc*
2,安装JDK,并设置环境变量,完成后测试安装成功否
Java代码
[root@ganglia ~]# java -version
java version "1.5.0"
gij (GNU libgcj) version 4.4.7 20120313 (Red Hat 4.4.7-4)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for ing conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[root@ganglia ~]#
3, 安装Maven,安装完成后测试安装与否
Java代码
[root@ganglia ~]# mvn -v
Apache Maven 3.2.1 (; 2014-02-15T01:37:52+08:00)
Maven home: /usr/local/maven
Java version: 1.7.0_25, vendor: Oracle Corporation
Java home: /usr/local/jdk1.7.0_25/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-431.el6.x86_64", arch: "amd64", family: "unix"
[root@ganglia ~]#
4, 安装Ant, 安装完成后,依旧测试成功与否
Java代码
[root@ganglia ~]# ant -version
Apache Ant(TM) version 1.9.4 compiled on April 29 2014
[root@ganglia ~]#
5,安装protobuf,安装方式,从官网下载tar.gz的包,并上传到linux上解压,然后进入根目录下,执行如下的几个命令:
Java代码
./configure
make
make check
make install
然后,执行如下命令,进行测试安装成功与否
Java代码
[root@ganglia protobuf-2.5.0]# protoc
Missing input file.
[root@ganglia protobuf-2.5.0]#
6,从hadoop官网下载hadoop2.2.0的版本的源码的src的包,并查看目录
Java代码
[root@ganglia ~]# cd hadoop-2.2.0-src
[root@ganglia hadoop-2.2.0-src]# ll
总用量 108
-rw-r--r--. 1 67974 users 9968 10月 7 2013 BUILDING.txt
drwxr-xr-x. 2 67974 users 4096 10月 7 2013 dev-support
drwxr-xr-x. 4 67974 users 4096 6月 9 17:05 hadoop-assemblies
drwxr-xr-x. 3 67974 users 4096 6月 9 17:27 hadoop-client
drwxr-xr-x. 9 67974 users 4096 6月 9 17:14 hadoop-common-project
drwxr-xr-x. 3 67974 users 4096 6月 9 17:26 hadoop-dist
drwxr-xr-x. 7 67974 users 4096 6月 9 17:20 hadoop-hdfs-project
drwxr-xr-x. 11 67974 users 4096 6月 9 17:25 hadoop-maprece-project
drwxr-xr-x. 4 67974 users 4096 6月 9 17:06 hadoop-maven-plugins
drwxr-xr-x. 3 67974 users 4096 6月 9 17:27 hadoop-minicluster
drwxr-xr-x. 4 67974 users 4096 6月 9 17:03 hadoop-project
drwxr-xr-x. 3 67974 users 4096 6月 9 17:05 hadoop-project-dist
drwxr-xr-x. 12 67974 users 4096 6月 9 17:26 hadoop-tools
drwxr-xr-x. 4 67974 users 4096 6月 9 17:24 hadoop-yarn-project
-rw-r--r--. 1 67974 users 15164 10月 7 2013 LICENSE.txt
-rw-r--r--. 1 67974 users 101 10月 7 2013 NOTICE.txt
-rw-r--r--. 1 67974 users 16569 10月 7 2013 pom.xml
-rw-r--r--. 1 67974 users 1366 10月 7 2013 README.txt
[root@ganglia hadoop-2.2.0-src]#
7,修改/root/hadoop-2.2.0-src/hadoop-common-project/hadoop-auth/pom.xml文件,增加,补丁内容,这部分是hadoop2.2.0的bug,如果是其他的2.x的版本,可以视情况而定,内容如下:
Xml代码
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<scope>test</scope>
</dependency>
<!--新增的内容开始 -->
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-util</artifactId>
<scope>test</scope>
</dependency>
<!--新增的内容结束 -->
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<scope>test</scope>
</dependency>
8,修改完毕后,回到hadoop-2.2.0-src的跟目录下执行编译打包命令:
Java代码
mvn clean
mvn package -Pdist,native -DskipTests -Dtar
然后等待半个小时左右的编译时间,网速快的话,时间可能会更短,编译完成 编译好的hadoop包,
Java代码
[root@ganglia target]# pwd
/root/hadoop-2.2.0-src/hadoop-dist/target
[root@ganglia target]# ll
总用量 282348
编译完成后的本地库,位于如下位置,并查看本地库支持位数:
至此,我们的编译已经,成功完成,然后,我们就可以使用在target目录下,编译生成的hadoop新的tar.gz包,来部署我们的hadoop集群。
‘贰’ 如何使用ANT在命令行进行编译和测试
一、环境变量
在网上找到ANT的压缩包,解压缩以后放到C盘根目录如下图
对,就是这个鬼样子,放在这里就可以用了,不用安装之类的
环境变量如下图:
你要定义ANT_HOME,然后让系统path找到这个ANT_HOME就行了
二、写build.xml
你的目录结构如下图:
源文件 放在src
引用的jar包放在lib
编译结果安排在classes
接下来就是build.xml了
如下,自己看吧
[html] view plain
<?xml version="1.0"?>
<project name="pojo_0428" default="prepare" basedir=".">
<property name="source.root" value="src"/>
<property name="class.root" value="classes"/>
<property name="lib.dir" value="lib"/>
<!-- class path for compilation and execution -->
<path id="basepath">
<!-- 运行时 class文件的位置 -->
<pathelement location="${class.root}" />
<!-- jar包 -->
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
</path>
<!--默认的target -->
<target name="prepare">
<delete dir="${class.root}"/>
<mkdir dir="${class.root}"/>
</target>
<!--编译 -->
<target name="compile" depends="prepare">
<javac srcdir="${source.root}"
destdir="${class.root}"
debug="on"
optimize="off"
deprecation="on">
<classpath refid="basepath"/>
</javac>
</target>
<!--执行。 案例程序的入口 依赖 compile -->
<target name="run" depends="compile">
<java classname="com.javathink.Student" fork="true">
<classpath refid="basepath"/>
</java>
</target>
</project>
‘叁’ 如何重新编译hadoop jar包
重新编译hadoop jar包:
编译打包
由于hadoop打包时需要依赖于操作系统的底层。
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install autotool
sudo apt-get install libtool
4.安装jdk1.5 和apache-forrest-0.8
打包命令:ant package -Djava5.home=/home/rongneng/env/jdk1.5.0_22 -Dforrest.home=/home/rongneng/env/apache-forrest-0.8
‘肆’ 用ant将程序编译和运行,都要做什么工作
ant是apache项目组的一个子项目,是一个基于java的构建工具。ant本身用java实现,要构建的工程的配置文件用xml格式描述,可以很方便的实现跨平台构建工作。
ant 可以从http://ant.apache.org下载,目前最新版本为1.5.4。下载完毕后直接解压缩到一个目录,例如D:\ant。
下一步我们需要设置如下的环境变量:
ANT_HOME:ant的安装目录,如果按上面方法解压缩了ant,那么这个值应该设为D:\ant
JAVA_HOME:jdk的安装目录
PATH:把%ANT_HOME%\bin目录加到path变量,以便于从命令行直接运行ant。
(1)建立build.xml
用ant编译规模较大的工程非常方便,每个工程都对应一个build.xml文件,这个文件包含与这个工程有关的路径信息和构建任务。
下面是一个最简单的build.xml文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="projectTemplate" default="init" basedir=".">
<target name="init" >
<property name="lib.dir" value="lib"/>
<echo message="Hello ,lib.dir is set to ${lib.dir}" >
</echo>
</target>
</project>
每个build.xml有且仅有一个project,每个project下面可以包含多个target,每个target表示一个小的任务,每个任务负责执行一段脚本。ant有内置任务集可供使用,例如上面的echo就是在console上显示消息。
更详细的内置任务请参考http://ant.apache.org/manual/coretasklist.html
${lib.dir}表示引用一个名字叫做lib.dir的属性值,这个属性的值就是lib。
(2)运行ant
使用ant.bat可以直接运行ant,如果不带任何参数,ant会在当前路径下搜索build.xml文件,如果找到了这个文件,就运行project的default属性指定的target.我们也可以带参数来运行ant,以便选择build.xml文件和要运行的target:
ant -buildfile c:\demo\build.xml init
表示运行c:\demo\build.xml 中名字为init的target
(3)ant的目标依赖
target有一个属性depends,在其中可以指定一系列的target名字,表示在执行该target前,必须首先执行的一系列其它target。depends具有传递性,例如:targetA depends targetB,而targetB depends targetC和targetD,这样在执行targetA之前,首先执行C和D,然后执行B,最后才会执行A。
下面是个简单的例子,在执行编译的动作前,首先需要建立一个目标代码存放的目录,然后再执行编译。
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="project" default="init" basedir=".">
<target name="init" >
<property name="dist" value="dist"/>
<mkdir dir="${dist}" />
</target>
<target name="build" depends="init">
<javac srcdir="SourceCode" destdir="${dist}">
</javac>
</target>
</project>
‘伍’ hadoop1.2.1+eclipse: 执行ant编译错误提示:
.在Eclipse中执行Ant的脚本编译出现问题
Copy
to clipboard
Posted by: njord
Posted on: 2003-08-19
11:40
信息如下:
compile:
[javac]
Compiling 15 source files to
E:\work_home\OakingSecurity\build\classes
[javac] BUILD FAILED:
file:E:/work_home/OakingSecurity/build.xml:48: Unable to find a javac
compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps
JAVA_HOME does not point to the
JDK
我的系统变量设置了JAVA_HOME的,在命令行直接运行ant都没有问题。
请问这是怎么回事?是不是还要在Eclipse中设置什么?
2.Re:在Eclipse中执行Ant的脚本编译出现问题 [Re: njord]
Copy
to clipboard
Posted by: fengyifan
Posted on: 2003-08-19
21:49
put tools.jar in ant classpath
3.Re:在Eclipse中执行Ant的脚本编译出现问题 [Re: njord]
Copy
to clipboard
Posted by: babyoracle
Posted on: 2003-08-20
07:42
用这个方法就可以了
http://www.cjsdn.com/post/view?bid=7&id=45620&sty=3&tpg=1&age=0
4.Re:在Eclipse中执行Ant的脚本编译出现问题 [Re: njord]
Copy
to clipboard
Posted by: njord
Posted on: 2003-08-22
13:03
在Eclipse的首选项中可以配置ANT_HOME,但又出现如下错误:
BUILD FAILED:
java.lang.VerifyError: (class:
org/apache/xerces/parsers/IntegratedParserConfiguration, method:
configurePipeline signature: ()V) Incompatible type for getting or setting
field
Total time: 94 milliseconds
为什么?
5.Re:在Eclipse中执行Ant的脚本编译出现问题 [Re: feng]
Copy
to clipboard
Posted by: njord
Posted on: 2003-08-22
13:12
feng wrote:
put tools.jar in ant
classpath
用Eclipse默认的ANT选项,然后加上tools.jar是可以了,不过它又提示不支持junit任务,晕倒~
[junit]
BUILD FAILED: file:E:/work_home/OakingSecurity/build.xml:76: Could not create
task or type of type: junit.
Ant could not find the task or a class this
task relies upon.
而我用自己下载的Ant1.5.3又出现前面帖子的错误提示,为什么?
6.Re:在Eclipse中执行Ant的脚本编译出现问题 [Re: njord]
Copy
to clipboard
Posted by: njord
Posted on: 2003-08-22
13:19
