记录一次编译hadoop2.5的源码并导入eclipse java 工程,采用的是cdh5.3.0版本的hadoop,操作环境是ubuntu14.10。具体步骤如下:
一、准备环境
编译hadoop需要很多依赖环境,这可以在下载下来的hadoop文件夹下的src目录下察看BUILDING.txt文件里看到。该文件不但列出了依赖的工具和库,还有简单的编译步骤说明。在装完这些依赖环境后,别忘了重启系统。
1. protocol buffer 2.5.0:这个是google的序列化工具,由于google关闭中国市场,自然protocolbuf也就没法在google的官网上下载,可以自行baidu,我是在csdn上下载到的。之后就是安装了:
./configure make make install sudo apt-get install protoc(如果在上述步骤完成后命令行不识别protoc命令)
2.cmake
sudo apt-get install cmake
3.zlib
下载地址:http://www.zlib.net/。直接官网下载就行
./configure make make install
4.openssl & openssl-dev
需要注意的是openssl和openssl-dev并没有一起发布,需要分别安装,openssl 下载地址:http://www.openssl.org/source/。直接官网下载。
./config make make install
至于openssl-dev,即一些供开发者用的openssl头文件和库等,在ubuntu下可以直接安装:
sudo apt-get install libssl-dev
5.findbugs
这是一个用来找bug的工具,好像是直接分析java的字节码分析代码缺陷。其下载地址:http://sourceforge.jp/projects/sfnet_findbugs/downloads/findbugs/3.0.0/findbugs-3.0.0.tar.gz/
安装步骤如下(注意把相关bin及findbugs_home加入系统环境变量):
tar zxvf findbugs-3.0.0.tar.gz vim /etc/profile export FINDBUGS_HOME=/home/zx/software/findbugs-3.0.0 export PATH=$PATH:$FINDBUGS_HOME/bin
二、编译代码
这步相对比较简单,执行命令即可,可以参考董西成的<<Hadoop技术内幕:深入解析YARN架构设计与实 现原理>>,此书第一章已经很详细了。如果上述环境安装好后,只需要执行如下命令即可:
cd ${HADOOP_HOME}/src mvn package -Pdist,native,docs -DskipTests -D tar
编译过程中可能会报错,基本上都是依赖的环境没装好,导致各种maven 插件及其依赖出问题。拿着错误信息baidu,一般都能解决。
三、导入到eclipse工程
导入eclipse工程分两步:1)生成eclipse工程,2)导入eclipse工程。
1、生成eclipse工程
执行以下命令即可
cd ${HADOOP_HOME}/src mvn org.apache.maven.plugins:maven-eclipse-plugin:2.6:eclipse -DskipTests
注意:如果按照官网上说的执行mvn eclipse:eclipse -DskipTests,则会报错,查了资料说大概是默认用了2.8版本的maven-eclipse-plugin,而这里好像会有bug啥的。若是2.8版本的maven-eclipse-plugin,则报错信息如下:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-eclipse-plugin:2.8 :eclipse (default-cli) on project hadoop-common: Request to merge when 'filtering' is not identical. Original=resource src/main/resources: output=target/classes, include=[], exclude=[common-version-info.properties|**/*.java], test=false, filtering=false, merging with=resource src/main/resources: output=target/classes, include=[common-version-info.properties], exclude=[**/*.java], test=false, filtering=true -> [Help 1]
2)导入eclipse工程
顺便提一下,在ubuntu下让eclipse锁定到launcher里会很方便,顺便说下让eclipse显示在launcher或桌面的方法。
1.vim /usr/share/applications/eclipse.desktop add the following line in the txt: [Desktop Entry] Encoding=UTF-8 Name=eclipse Comment=EclipseIDE Exec=/home/zx/software/eclipse/eclipse Icon=/home/zx/software/eclipse/icon.xpm Terminal=false StartupNotify=true Type=Application Categories=Application;Development; 2. chmod 777 /usr/share/applications/eclipse.desktop 3. search the application with 'eclipse' in the dashbord, and drag the icon in the launcher.
接着回归正题:导入eclipse 工程: import->general->Existing project into workspace.导入后就是三四十个java工程,然后就是修改错误,以下摘录网上,也是碰到并亲测过的 :
1)hadoop-streaming中build path错误->Java Build Path->Source:
删除...hadoop-yarn-server-resourcemanager/conf
Link Source:源码根目录/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/conf,再随便起个名字;inclusion patterns:capacity-scheduler.xml;exclusion patters:**/*.java
2) org.apache.hadoop.io.serializer.avro.TestAvroSerialization
下载avro-tools-1.7.4.jar:http://archive.apache.org/dist/avro/avro-1.7.4/java/
进入目录:源码根目录\hadoop-common-project\hadoop-common\src\test\avro
java -jar path/to/avro-tools-1.7.4.jar compile schema avroRecord.avsc ..\java
eclipse 刷新
3) org.apache.hadoop.ipc.protobuf.TestProtos
进入目录:源码根目录\hadoop-common-project\hadoop-common\src\test\proto
protoc --java_out=../java *.proto
eclipse 刷新