.最近捣鼓cdh云存储,因为与eclipse端不兼容,各类神奇,把cdh4降成cdh3u5,而后又降成cdh3u4,总之很烦,后来看到了篇文章关于如何本身编译eclipse plugin的jar包,而后本身修改修改,在这里跟你们分享分享java
首先,不管你的服务器上Hadoop 使用的是什么版本,你都须要下载对应的这个版本的源代码包进行编译. 你是Apache Hadoop 0.20.2 就去Apache 下0.20.2 的,你是Apache 0.21 版本的就去下0.21 版本的. 你是Cloudera CHDu.x 版本的,就去Cloudera 网站上下它的CDHu.x 版本对应的tar 包. 确保你要链接的服务器版本和你打算编译的eclipse-plugin版本是一致的.
在本身编译eclipse-plugin以前,你须要apache-ant, apache-maven, apache-ivy若是你打算编译整个包括hadoop的服务器版本并生成二进制包,你还须要apache-forrest 用来输出文档. ant,maven,forrest 的安装跟java 的安装没有区别,解压,而后添加对应的bin目录到path 变量. ivy 的安装就是添加一个apache-ivy-xxx.jar 到你的ant 安装目录下的lib 目录. 这些前提工具就算安装好了.
而后从命令行进入你解压的$hadoop_home (cdh4的源码包中的目录为/root/hadoop-2.0.0-cdh4.1.1/src/hadoop-mapreduce-project)源代码目录, 执行ant compile-core , 这个会编译基础的hadoop-core 包. 注意若是你是在linux 下这个命令不会报错,可是若是你是windows 会报can’t run program mvn , 在对应的build.xml 文件的42 行,你须要进入$Hadoop_home/build.xml 文件的42行,修改vim
<exec executable="mvn" xxxxxxxxxxxxxxxxxxxxx
改为 <exec executable="mvn.bat" xxxxxxxxxxxxxxxxxx
若是你打算编译整个包的话对应的1230 行里面的forrest 在windows 下一样会出现这个错误.
而后你须要将$Hadoop_home 下面的hadoop-core-xxx.jar 文件拷贝到$Hadoop_home/build 目录下. 你是什么版本的就拷贝对应版本的hadoop-core-xxx.jar 文件. 好比我编译的是hadoop-core-0.20.2-cdh3u4.jar 文件.
进入$Hadoop_home/src/contrib/eclipse-plugin 目录, 执行
ant –Declipse.home=/path/to/eclipse -Dversion=0.20.2-cdh3u4 jar
注意,若是你没有执行前面一步的copy 工做,你会报错找不到build/hadoop-core-xxx.jar 文件. 你也能够修改对应eclipse-plugin 目录下的build.xml 文件的69行左右对应的两个copy 任务.
<copy file="${hadoop.root}/build/hadoop-core-${version}.jar" tofile="${build.dir}/lib/hadoop-core.jar" verbose="true"/>
<copy file="${hadoop.root}/build/ivy/lib/Hadoop/common/commons-cli-${commons-cli.version}.jar" todir="${build.dir}/lib" verbose="true"/>
确保copy 的这些文件可以在对应的目录找到. 若是你是0.21 版本的apache-hadoop ,因为0.21 版本彻底maven 化了. 你可能须要添加hadoop-core-xxx , hadoop-mapreduce-xxx.jar hadoop-hdfs-xxx.jar , 个人是CDHu4 的,你在执行完这个以后在$hadoop_home/build/contrib/eclipse-plugin 下面会有一个hadoop-eclipse-plugin-0.20.2-cdh3u4.jar 的文件. 不过这个文件是不能用的,会提示你差一些jar 文件. 你须要添加 jackson-core-asl-xxx.jar , jackson-mapper-asl-xxx.jar , commons-httpclient-xxx.jar 文件. 具体的version 你须要到$hadoop_home/lib 目录下本身找. apache-hadoop 0.20.205 版本的好像用的是jackson-core-1.0.1版本的. CDHu4 版本用的好像是jackson-core-1.5.2 版本的.
<copy file="${hadoop.root}/lib/jackson-core-asl-1.5.2.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/jackson-mapper-asl-1.5.2.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-httpclient-3.1.jar" todir="${build.dir}/lib" verbose="true"/>
编译好以后放在eclipse 的dropin 目录下就能够了.
注意链接的时候MapReduce-Master port 别和DFS port 填反了,否则会报fail to open /xxxx 的错误. 默认安装的时候应该是mapreduce 是8021 , dfs 是8020 , 查看你对应服务器上的端口配置
若是出现这样的问题
(1)/src/contrib/eclipse-plugin/build.xml:62: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds,则是ant版本有点高,1.8以上须要设置一下includeantruntime
具体设置
<javac.....includeantruntime=false>在其中加上这一项便可
(2)/root/hadoop-2.0.0-cdh4.1.1/src/hadoop-mapreduce-project/src/contrib/eclipse-plugin/bu exist出现这个问题,须要到这个目录下SRC_BASE_DIR/hadoop-common/hadoop-mapreduce-project
执行命令mvn -DskipTests install便可
(3).编译心得,开始的时候不会整,按照网上介绍的开始弄,老是会有这样那样的奇葩的问题,最近总结了一些,跟你们分享下,每次遇到错误的时候,第一反应就是百度,谷歌,其实咱们本身能够根据错误提示,像编译cdh4的时候遇到这个错误
- /root/hadoop-2.0.0-cdh4.1.1/src/hadoop-mapreduce-project/src/contrib/eclipse-plugin/build.xml:72: /root/hadoop-2.0.0-cdh4.1.1/src/hadoop-mapreduce-project/build/ivy/lib/Hadoop/common does not exist.
,
- vim /root/hadoop-2.0.0-cdh4.1.1/src/hadoop-mapreduce-project/src/contrib/eclipse-plugin/build.xml
看看它的第72行是什么,虽然里面语言看不太懂,但也大体能够理解,
- <copy tofile="${build.dir}/lib/hadoop-common.jar">
- <fileset dir="${hadoop.root}/build/ivy/lib/Hadoop/common" includes="hadoop-common-*.jar" excludes="hadoop-common-*tests.jar"/>
- </copy>
能够看出是将${hadoop.root}/build/ivy/lib/Hadoop/common目录下的hadoop-common-*.jar包(除了hadoop-common-*tests.jar)包拷贝到
${build.dir}/lib/hadoop-common.jar
这就能大体理解了,去找${hadoop.root}/build/ivy/lib/Hadoop/common目录,发现没有这个目录,因而建立这个目录
而后问题又来了,紧接着报了这个错/root/hadoop-2.0.0-cdh4.1.1/src/hadoop-mapreduce-project/src/contrib/eclipse-plugin/build.xml:72: Cannot perform operation from directory to file
当时就恍然大悟,刚建立的那个目录里面没有hadoop-commons这个包,而后find 命令,找到这个包hadoop-common-2.0.0-cdh4.1.1.jar,放进去
而后就成功了,其实都很简单,只是咱们不注意,这些错误,若是直接百度,谷歌的话,还真是收获不多